什么是 LKM?
可加载内核模块 是内核的扩展,可以在需要时附加到内核中,或从内核中删除。LKM 基本上是设备驱动程序的软件实现,它与真实的或者虚拟的硬件设备协同工作。当 LKM 加载到内核中时,它们监听和处理对设备的任何请求。由于只加载所需的 LKM,因此使用 LKM 可使内核变得轻便、模块化、灵活和可伸缩。编写 Linux 内核模块的体系结构如下:
1. init_module
这个 LKM 初始化函数是强制执行的。当 LKM 加载到内核时触发该函数,因此所有初始化工作都是在这个函数中完成的。
2. 处理特定的函数
这些函数执行实际的工作,如读、写、打开、关闭设备,等等。
3. cleanup_module
当从内核中删除 LKM 时,调用 LKM 的这个强制执行函数。因此,所有清除工作如释放内存等都应在这个函数中执行。
编写 LKM 后,可以采用下列命令编译它:
gcc -c -g<module_name>.c -I/usr/src/linux/include
该命令产生一个名为 <module_name>.o 的文件,它就是 LKM,可以使用下列命令将它加载到内核中:
insmod -f <module_name>.o
-f
如果在加载模块时遇到任何内核版本问题,可以通过在加载 LKM 时包含这个特定内核的头文件来解决问题。因此,在编译内核时,请使用 -I/usr/src/linux/include。
还可以使用 Makefile 来解决此类版本问题.
卸载 LKM
一旦模块加载到内核中,它将开始执行预定的功能。使用命令 lsmod 可以看到当前所有加载的 LKM 的列表。
可以使用 rmmod <module_name> 从内核中加载或删除模块。
要注明这是2.4内核的
页:
[1]