深入 Linux 设备驱动程序内核机制
本书并不着重于全面描述 Linux 内核,也不只是简单地告诉你如何去写一个 Linux 下
的设备驱动程序。它是从设备驱动程序的视角出发,深入到 Linux 内核去剖析那些和驱动程
序实现机制密切相关的技术内幕。比如让你理解为什么在某个地方驱动程序应该使用 work
queue 而不是 tasklet,为什么在中断处理例程里应该使用 spin_lock 而不是 mutex_lock.......因
为只有当你对驱动程序中使用的各种内核实现有了清晰的认识,你才能在日常的工作当中
随心所欲地驾驭它们,写出更高性能更安全的代码。
第 1 章 内核模块
本章要讨论的主题----Linux 内核模块。本章将重点关注并讨论如下问题:
模块的加载过程。
模块如何引用内核或者其他模块中的函数与变量。
模块本身导出的函数与变量如何被别的内核模块说使用。
模块的参数传递机制。
模块中的版本控制机制。
1.1 内核模块的文件格式
以内核模块形式存在的驱动程序,其在文件的数据组织形式上是 ELF(Executable and
Linkable Format)格式,更具体地,内核模块是一种普通的可重定位目标文件。
可用 file 命令查看 demodev.ko,得到如下输出: