Linux 可加载内核模块 HOWTO

Bryan Henderson

2006-09-24

修订历史
版本 v1.092006-09-24修订者:bjh
修复拼写错误。
版本 v1.082006-03-03修订者:bjh
添加版权信息。
版本 v1.072005-07-20修订者:bjh
添加一些 2.6 信息和免责声明。更新对《Linux 设备驱动程序》和《Linux 内核模块编程指南》的引用。
版本 v1.062005-01-12修订者:bjh
简要介绍 Linux 2.6。更新 hello.c 和对 Lkmpg 的引用。添加关于卸载风险的信息。提及 dmesg 作为查看内核消息的方式。
版本 v1.052004-01-05修订者:bjh
添加关于 module.h 和 -DMODULE 的信息。将 tldb.org 修正为 tldp.org。添加关于 kallsyms 的信息。
版本 v1.042003-10-10修订者:bjh
修复拼写错误:AHA154x 应为 AHA152x。添加关于内核模块加载器调用的模块名称的信息。添加关于首次加载 LKM 时 LKM 执行操作的信息。添加关于 loop 模块的信息。将 linuxdoc.org 更改为 tldp.org。
版本 v1.032003-07-03修订者:bjh
更新关于不加载到 vmalloc 空间的内核的信息。添加对 LKM “deleted” 状态的解释。解释 GPLONLY。
版本 v1.022002-05-21修订者:bjh
修正符号版本控制的解释。更正《Linux 设备驱动程序》的作者。添加关于 LKM 与内置的内存分配开销的信息。添加 LKM 到 LKM 符号匹配的要求。添加 LKM 符号解析中的开源许可问题。添加 SMP 符号版本控制信息。
版本 v1.012001-08-18修订者:bjh
添加关于过去几年创建的各种特性的材料:内核模块加载器、ksymoops 符号、依赖于内核版本的 LKM 文件位置。
版本 v1.002001-06-14修订者:bjh
初始版本。

这是 Linux 可加载内核模块 (LKM) 的 HOWTO 文档。它解释了它们是什么,以及如何使用和创建它们。它还包括一些特定模块的参数和其他使用细节的文档。


目录
1. 前言
2. Linux 可加载内核模块简介
2.1. 术语
2.2. 可加载内核模块的历史
2.3. 可加载内核模块的理由
2.4. LKM 不能做什么
2.5. LKM 的用途
3. 制作可加载内核模块
4. LKM 实用程序
5. 如何插入和移除 LKM
5.1. 找不到内核版本...
5.2. LKM 加载时会发生什么
5.3. LKM 的智能加载 - Modprobe
5.4. 自动 LKM 加载和卸载
5.5. /proc/modules
5.6. 我的 LKM 文件在系统上的什么位置?
6. 未解析的符号
6.1. 一些 LKM 预先需要其他 LKM
6.2. LKM 必须与基础内核匹配
6.3. 如果您运行多个内核
6.4. SMP 符号
6.5. 您未被授权访问该符号
6.6. LKM 必须与先决条件 LKM 匹配
7. 如何在没有磁盘设备驱动程序的情况下启动
8. 关于模块参数
9. 持久数据
10. 技术细节
10.1. 它们如何工作
10.2. .modinfo 节
10.3. __ksymtab 和 .kstrtab 节
10.4. Ksymoops 符号
10.5. 其他符号
10.6. 调试符号
10.7. 加载的内存分配
10.8. Linux 内部
11. 编写您自己的可加载内核模块
11.1. 更简单的 hello.c
11.2. 使用内核构建系统
11.3. Rubini 等人:《Linux 设备驱动程序》
11.4. 模块使用计数
12. Linux 版本之间的差异
12.1. Linux 2.4 - Linux 2.6
13. LKM 的版权考虑
14. 相关文档
15. 个别模块
15.1. 可执行解释器
15.2. 块设备驱动程序
15.3. SCSI 驱动程序
15.4. 网络设备驱动程序
15.5. CDROM 设备驱动程序
15.6. 文件系统驱动程序
15.7. 杂项设备驱动程序
15.8. 串行设备驱动程序
15.9. 并行设备驱动程序
15.10. 总线鼠标设备驱动程序
15.11. 磁带设备驱动程序
15.12. 看门狗定时器
15.13. 声音设备驱动程序
16. 本文档的维护
17. 历史
18. 版权