我正在尝试根据《Linux 设备驱动程序》一书编写一个简单的设备驱动程序,但无法设置正确的包含路径。我正在使用一个简单的 make 脚本。操作系统是 Ubuntu 14.04 LTS,内核为 3.13.0-29-generic,安装在一台基于英特尔(奔腾 D(EMT/64 位)的旧 PC 上。我试过:
I/usr/src/include
-> 错误:找不到 module.h(应该有链接,但是却不存在)
I/usr/src/linux-headers-3.13.0-29-generic/include and copied .config from /boot/...
-> 工作了一段时间,但找不到 asm 包含
在上面的包含目录中,我找到了一个名为 asm-generic 的目录,因此我创建了一个链接asm -> asm-generic
。继续工作一段时间,直到asm/Thread_info.h
搜索到文件。
在硬件相关目录结构中找到了很多。在我通过设置更多链接弄乱整个系统之前,设置包含路径的正确方法是什么?
答案1
对于内核驱动程序,您应该包含路径/lib/modules/$(uname -r)/build/include
。请勿使用/usr/src/include
- 这是用户空间标头的路径。
请注意,“Linux 设备驱动程序”一书现已过时(约 10 年前),许多示例将无法编译。有一个 github 存储库,其中包含原始源代码,已对其进行修补,以便使用较新的内核进行编译,网址为https://github.com/martinezjavier/ldd3