没有合适的资源?快使用搜索试试~ 我知道了~
首页Linux 可加载内核模块剖析
资源详情
资源评论
资源推荐

Linux 可加载内核模块剖析
简介:Linux® 可加载内核模块(从内核的1.2 版本开始引入)是Linux 内
核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载
模块后面的原理,并学习这些独立的对象如何动态地转换成Linux 内核的一部
分。
Linux 就是通常所说的
单内核(
monolithic kernel
)
,即操作系统的大部
分功能都被称为
内核
,并在特权模式下运行。它与
微型内核
不同,后者只把基
本的功能(进程间通信[IPC]、调度、基本的输入/输出[I/O] 和内存管理)当
作内核运行,而把其他功能(驱动程序、网络堆栈和文件系统)排除在特权空
间之外。因此,您可能认为Linux 是一个完全静态的内核,但事实恰恰相反。
通过Linux 内核模块(LKM)可以在运行时动态地更改Linux。
可动态更改
是指可以将新的功能加载到内核、从内核去除某个功能,甚至添加
使用其他LKM 的新LKM。LKM 的优点是可以最小化内核的内存占用,只加载
需要的元素(这是嵌入式系统的重要特性)。
Linux 不是可以进行动态更改的惟一(也不是第一个)单内核。Berkeley
Software Distribution(BSD)的变体、Sun Solaris、更老的内核(比如
OpenVMS),以及其他流行的操作系统(比如Microsoft® Windows® 和
Apple Mac OS X)都支持可加载模块。
剖析内核模块
LKM 与直接编译到内核或典型程序的元素有根本区别。典型的程序有一个
main 函数,其中LKM 包含entry 和exit 函数(在2.6 版本,您可以任意命
名这些函数)。当向内核插入模块时,调用entry 函数,从内核删除模块时则
调用exit 函数。因为entry 和exit 函数是用户定义的,所以存在
module_init 和module_exit 宏,用于定义这些函数属于哪种函数。LKM 还
包含一组必要的宏和一组可选的宏,用于定义模块的许可证、模块的作者、模
块的描述等等。图1 提供了一个非常简单的LKM 的视图。
图 1. 简单 LKM 的源代码视图


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论1