当前位置:嗨网首页>书籍在线阅读

03-可加载模块

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

8.1.1 可加载模块

和其他一些操作系统不同,Linux允许你在运行时添加和删除内核组件。Linux采用一体化的内核结构,并提供了定义良好的接口,用于在系统启动后动态添加和删除设备驱动程序。这一特性不仅给用户提供了灵活性,而且对于设备驱动程序的开发人员来说意义重大。假设你的设备驱动程序能够正常工作,你可以在开发过程中随意将这个设备驱动程序添加到一个运行的内核中,或是从中删除,而不用在每次修改和测试时重启内核。

可加载模块对于嵌入式系统来说特别重要。可加载模块提升了系统的现场升级能力。比如,可以在系统运行时更新一个模块而不用重启系统。模块可以存储在一个和根(引导)设备不同的媒介上,从而节省根设备的存储空间。

当然,也可以将设备驱动程序静态编译到内核中,而且对于很多驱动程序来说这非常合适。比如,考虑这样一个内核,我们将它配置为从一个网络上的NFS服务器挂载其根文件系统。在这个场景中,你需要将网络相关的驱动程序(TCP/IP和网络接口卡驱动程序)静态编译到主内核镜像中,以便它们可以在引导过程中用于挂载远端的根文件系统。如果你不想将这些驱动静态编译到内核主体中,还有另一种选择,那就是使用我们在第6章中讲述的初始ramdisk。在这种情况下,初始的ramdisk镜像中会包含必要的模块和一个用于加载它们的脚本。

可加载模块是在内核引导完成后安装到系统中的。启动脚本可以加载设备驱动程序模块,必要时,模块也可以“按需加载”。当某个收到请求的服务需要一个特定的模块时,Linux能够按照它的需求加载模块[2]

[2] 我们会在第19章中详细讲述这个机制。

在有关内核模块的讨论中还从来没有过标准化的术语使用规则。当讨论Linux设备驱动程序时,很多术语都是可以互换使用的,而且会一直这样沿用下去。在本章以及后续章节中,以下这些术语:设备驱动程序、可加载内核模块(Loadable Kernel Module,LKM)、可加载模块和模块共同用于描述一个内核设备驱动程序模块。