QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1112|回复: 1

什么是 LKM?

[复制链接]
发表于 2005-2-28 08:19:48 | 显示全部楼层 |阅读模式
可加载内核模块 是内核的扩展,可以在需要时附加到内核中,或从内核中删除。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> 从内核中加载或删除模块。
发表于 2005-2-28 10:32:58 | 显示全部楼层
要注明这是2.4内核的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-6-16 09:11 , Processed in 0.093226 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表