Linux可加载内核模块剖析

Linux可加载内核模块剖析

ID:44209334

大小:158.69 KB

页数:8页

时间:2019-10-19

Linux可加载内核模块剖析_第1页
Linux可加载内核模块剖析_第2页
Linux可加载内核模块剖析_第3页
Linux可加载内核模块剖析_第4页
Linux可加载内核模块剖析_第5页
资源描述:

《Linux可加载内核模块剖析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Linux可加载内核模块剖析2.6内核透视图简介:Linux®可加载内核模块(从内核的1.2版木开始引入)是Linux内核的最重要创新Z-o它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成Linux内核的一部分。Linux就是通常所说的单内核(monolithickernel),即操作系统的人部分功能都被称为內孩;并在特权模式下运行。它与微型内核不同,后者只把基木的功能(进程间通信[IPC]、调度、基木的输入/输出[I/O]和内存管理)当作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空间

2、之外。因此,您可能认为Linux是一个完全静态的内核,但事实恰恰相反。通过Linux内核模块(LKM)可以在运行时动态地更改LinuxodeveloperWorksTim所著的其他剖析系列文章•Linuxflash文件系统咅lj析•Security-EnhancedLinux(SELinux)剖析•实时Linux架构剖析•LinuxSCSI子系统咅lj析•Linux文件系统剖析•Linux网络栈剖析•Linux内核剖析•Linuxslab分配器剖析•Linux同步方法剖析•Tim所著的所有畀瞒……系列文章/T动,杏更攻是指可以将新的功能加载到内核、从内核去除

3、某个功能,甚至添加使用其他LKM的新LKMoLKM的优点是可以最小化内核的内存占用,只加载需要的元素(这是嵌入式系统的重要特性)。Linux不是可以进行动态更改的惟一(也不是第一个)单内核。BerkeleySoftwareDistribution(BSD)的变体、SunSolaris>更老的内核(比如OpenVMS),以及其他流行的操作系统(比如Microsoft®Windows®和AppleMacOSX)都支持可加载模块。剖析内核模块LKM与直接编译到内核或典型程序的元素有根本区别。典型的程序有一个main函数,其中LKM包含entry和exit函数(在2

4、.6版本,您可以任意命名这些函数)。当向内核插入模块时,调用entry函数,从内核删除模块时则调用exit函数。因为entry和exit函数是用户定义的,所以存在module_init和module_exit宏,用于定义这些函数属于哪种函数。LKM还包含一-组必姿的宏和一组可拡的宏,用于定义模块的许可证、模块的作者、模块的描述等等。图1提供了一个非常简单的LKM的视图。图1.简单LKM的源代码视图frincl^deUniili-cletinitMODULE_LICENSEInG?I.,r1;ModuleMODULE_AUTH

5、OR:''ModuleAuthor^);macrosMODULE_DESCRIPTIONI:;Stetict__initmod_«ntry_func:mid)j1returnD;JModulecontractor/hvoid«xit.mod^exit_func!void)idestructor1x«tuxtiJmodule^init(OKxi_en):Entry/exitmoduleexit(B»od_exlt_func);macros2.6版本的Linux内核提供了一个新的更简单的方法,用于构建LKM。糙LKM时,可以使用典型的用户工具管理模块(尽管内部

6、己经改变):标准insmod(安装LKM),rmmod(删除LKM),modprobc(insmod和rmmod的包装器),depmod(用于创建模块依赖项),以及modinfo(用于为模块宏查找值)。更多关于为2.6版本内核构建LKM的信息,请查看参考资料。回页首剖析内核模块对象LKM只不过是一个特殊的可执行可链接格式(ExecutableandLinkableFormat,ELF)对象文件。通常,必须链接对象文件才能在可执行文件屮解析它们的符号和结果。由于必须将LKM加载到内核后LKM才能解析符号,所以LKM仍然是一个ELF对象。您可以在LKM上使用标准

7、对象工具(在2.6版木屮,内核对象带有后缀・ko,)。例如,如果在LKM上使用objdump实用工具,您将发现一些熟悉的区段(section),也口.方ext(说明)、・data。己初始化数据)和•方ss(块开始符号或未初始化数据)。您还可以在模块屮找到其他支持动态特性的区段。.init.text区段包含modulc_init代码,・exit,text区段包含module_exit代码(参见图2)o.modinfo区段包含各种表示模块许可证、作聶和描述等的宏文本。了解LKM的基础知识之后,现在我们进一步探索模块是如何进入内核的,以及在内核内部是如何管理模块的

8、。回页首LKM的生命周期在用户空间屮,insmod(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。