Linux内核模块编程指南

Peter Jay Salzman
Ori Pomerantz

《Linux内核模块编程指南》是一本免费书籍;您可以根据开放软件许可证1.1版的条款复制和/或修改它。您可以在 https://open-source.org.cn/licenses/osl.php 获取许可证副本。

本书的发布是为了希望能对您有所帮助,但不提供任何担保,甚至不提供关于适销性或针对特定用途适用性的默示担保。

作者鼓励为了个人或商业用途广泛分发本书,前提是上述版权声明保持完整,并且方法符合开放软件许可证的规定。 总结来说,您可以免费或为了盈利复制和分发本书。 以任何媒介,物理或电子方式复制本书都不需要作者的明确许可。

本文档的衍生作品和翻译必须置于开放软件许可证之下,并且原始版权声明必须保持完整。 如果您为本书贡献了新材料,则必须提供您修订的材料和源代码。 请将修订和更新直接提供给文档维护者 Peter Jay Salzman. 这将允许合并更新,并为Linux社区提供一致的修订版本。

如果您以商业方式出版或分发本书,作者和Linux文档项目(LDP)将非常感谢捐款、版税和/或印刷版副本。 以这种方式贡献表明您对自由软件和LDP的支持。 如果您有任何问题或意见,请联系上述地址。


目录
前言
致谢
作者和版权
请注意
1. 简介
什么是内核模块?
模块如何进入内核?
开始之前
2. 你好,世界
你好,世界(第一部分):最简单的模块
介绍printk()
编译内核模块
你好,世界(第二部分)
你好,世界(第三部分):__init__exit
你好,世界(第四部分):许可和模块文档
向模块传递命令行参数
跨越多个文件的模块
3. 预备知识
模块 vs 程序
模块如何开始和结束
模块可用的函数
用户空间 vs 内核空间
命名空间
代码空间
设备驱动程序
4. 字符设备文件
字符设备驱动程序
file_operations 结构体
file 结构体
注册设备
注销设备
chardev.c
为多个内核版本编写模块
5. /proc 文件系统
/proc 文件系统
6. 使用 /proc 进行输入
使用 /proc 进行输入
7. 与设备文件通信
与设备文件通信(写入和IOCTL)}
8. 系统调用
系统调用
9. 阻塞进程
阻塞进程
替换printk
10. 替换 Printks
替换printk
11. 调度任务
调度任务
12. 中断处理程序
中断处理程序
中断处理程序
Intel架构上的键盘
13. 对称多处理
对称多处理
14. 常见陷阱
常见陷阱
A. 变更:2.0 到 2.2
2.0 和 2.2 之间的变更
2.0 和 2.2 之间的变更
B. 从这里开始
从哪里开始?
索引
示例列表
2-1. hello-1.c
2-2. 基本内核模块的Makefile
2-3. hello-2.c
2-4. 我们两个模块的Makefile
2-5. hello-3.c
2-6. hello-4.c
2-7. hello-5.c
2-8. start.c
2-9. stop.c
2-10. 多文件模块的Makefile
4-1. chardev.c
4-2. 一些标题
5-1. procfs.c
6-1. procfs.c
7-1. chardev.c
7-2. chardev.h
7-3. ioctl.c
8-1. syscall.c
9-1. sleep.c
10-1. print_string.c
11-1. sched.c
12-1. intrpt.c