BOoRFGOnZ 发表于 2005-2-28 08:19:48

什么是 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> 从内核中加载或删除模块。

kakuyou 发表于 2005-2-28 10:32:58

要注明这是2.4内核的
页: [1]
查看完整版本: 什么是 LKM?