1.1 什么是LKMs
LKMs就是可卸载的内核模块(Loadable Kernel Modules)。这些模块本来是Linux系统用于扩展他的功能的。使用LKMs的优点有:他们可以被动态的加载,而且不需要重新编译内核。由于这些优点,他们常常被特殊的设备(或者文件系统),例如声卡等使用。
每个LKM至少由两个基本的函数组成:
int init_module(void) /*用于初始化所有的数据*/ |
加载一个模块(常常只限于root能够使用)的命令是:
# insmod module.o
这个命令让系统进行了如下工作:
加载可执行的目标文件(在这儿是module.o)
调用 create_module这个系统调用(至于什么叫系统调用,见1.2)来分配内存.
不能解决的引用由系统调用get_kernel_syms进行查找引用.
在此之后系统调用init_module将会被调用用来初始化LKM->执行 int inti_module(void) 等等
(内核符号将会在1.3节中内核符号表中解释)
OK,到目前为止,我想我们可以写出我们第一个小的LKM来演示一下这些基本的功能是如何工作的了.
#define MODULE |