linux 可加载内核模块剖析

linux 可加载内核模块剖析

ID:12492267

大小:264.50 KB

页数:7页

时间:2018-07-17

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

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

1、Linux可加载内核模块剖析2.6内核透视图M.TimJones是一名嵌入式固件架构师,同时也是ArtificialIntelligence:ASystemsApproach,GNU/LinuxApplicationProgramming(第二版)、AIApplicationProgramming(第二版)和BSDSocketsProgrammingfromaMultilanguagePerspective等书的作者。他的工程背景非常广泛,从同步宇宙飞船的内核开发到嵌入式架构设计,再到网络协议的开发

2、。Tim是位于科罗拉多州Longmont的EmulexCorp.的一名顾问工程师。简介: Linux®可加载内核模块(从内核的1.2版本开始引入)是Linux内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成Linux内核的一部分。Linux就是通常所说的单内核(monolithickernel),即操作系统的大部分功能都被称为内核,并在特权模式下运行。它与微型内核不同,后者只把基本的功能(进程间通信[IPC]、调度、基本的输入

3、/输出[I/O]和内存管理)当作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空间之外。因此,您可能认为Linux是一个完全静态的内核,但事实恰恰相反。通过Linux内核模块(LKM)可以在运行时动态地更改Linux。developerWorks上Tim所著的其他剖析……系列文章·Linuxflash文件系统剖析·Security-EnhancedLinux(SELinux)剖析·实时Linux架构剖析·LinuxSCSI子系统剖析·Linux文件系统剖析·Linux网络栈剖析·L

4、inux内核剖析·Linuxslab分配器剖析·Linux同步方法剖析·Tim所著的所有剖析……系列文章可动态更改是指可以将新的功能加载到内核、从内核去除某个功能,甚至添加使用其他LKM的新LKM。LKM的优点是可以最小化内核的内存占用,只加载需要的元素(这是嵌入式系统的重要特性)。Linux不是可以进行动态更改的惟一(也不是第一个)单内核。BerkeleySoftwareDistribution(BSD)的变体、SunSolaris、更老的内核(比如OpenVMS),以及其他流行的操作系统(比如M

5、icrosoft®Windows®和AppleMacOSX)都支持可加载模块。剖析内核模块LKM与直接编译到内核或典型程序的元素有根本区别。典型的程序有一个main函数,其中LKM包含entry和exit函数(在2.6版本,您可以任意命名这些函数)。当向内核插入模块时,调用entry函数,从内核删除模块时则调用exit函数。因为entry和exit函数是用户定义的,所以存在module_init和module_exit宏,用于定义这些函数属于哪种函数。LKM还包含一组必要的宏和一组可选的宏,用于定义

6、模块的许可证、模块的作者、模块的描述等等。图1提供了一个非常简单的LKM的视图。图1.简单LKM的源代码视图2.6版本的Linux内核提供了一个新的更简单的方法,用于构建LKM。构建LKM时,可以使用典型的用户工具管理模块(尽管内部已经改变):标准insmod(安装LKM),rmmod(删除LKM),modprobe(insmod和rmmod的包装器),depmod(用于创建模块依赖项),以及modinfo(用于为模块宏查找值)。更多关于为2.6版本内核构建LKM的信息,请查看参考资料。回页首剖析内

7、核模块对象LKM只不过是一个特殊的可执行可链接格式(ExecutableandLinkableFormat,ELF)对象文件。通常,必须链接对象文件才能在可执行文件中解析它们的符号和结果。由于必须将LKM加载到内核后LKM才能解析符号,所以LKM仍然是一个ELF对象。您可以在LKM上使用标准对象工具(在2.6版本中,内核对象带有后缀.ko,)。例如,如果在LKM上使用objdump实用工具,您将发现一些熟悉的区段(section),比如.text(说明)、.data(已初始化数据)和.bss(块开始

8、符号或未初始化数据)。您还可以在模块中找到其他支持动态特性的区段。.init.text区段包含module_init代码,.exit.text区段包含module_exit代码(参见图2)。.modinfo区段包含各种表示模块许可证、作者和描述等的宏文本。图2.具有各种ELF区段的LKM的示例了解LKM的基础知识之后,现在我们进一步探索模块是如何进入内核的,以及在内核内部是如何管理模块的。回页首LKM的生命周期在用户空间中,insmod(插入模块)启动模块加载过程。i

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

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

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