这是《Linux Kernel Module Program Guide》的读书笔记。
0. 出处
1. 笔记
-
0.4. 章 “Hello World”
- P15-16 如何解决模块编译内核与运行内核不一致的问题。
- 最简单方法,加
--force-vermagic
选项。 - 从运行内核 /boot 目录拷贝 .config 到编译依赖内核。然后 make ,等脚本生成完成即可以终止。
- 最简单方法,加
-
0.5. 章 PRELIMINARIES
- P18
- 内核是自给自足的,不依赖 libc。If you’re curious about what symbols have been exported by your kernel, take a look at
/proc/kallsyms
.
- 内核是自给自足的,不依赖 libc。If you’re curious about what symbols have been exported by your kernel, take a look at
- P19
- strace 工具可以清楚看到程序的系统调用信息。
man 2 xxx
, 是查看系统调用信息;man 3 xxx
,是查看库函数信息。If that is the case, try looking at man 2 write. The 2nd man section is devoted to system calls (like kill() and read()). The 3rd man section is devoted to library calls, which you would probably be more familiar with (like cosh() and random()).
- P22
- 设备节点。mknod即可创建,主设备号代表驱动程序,次设备号是给驱动区分不同硬件的。换句话说,当应用程序访问一个设备节点文件时,内核根据主设备号去调对应的驱动程序,内核根本不关心次设备号,次设备号是传给驱动程序用来区分不同的硬件的。
-
0.6. Character Device drivers
-
0.14.2 Work queues
- P75
- work queue 举例与 queue 无关。