设备驱动程序缺少config.h

时间:2010-12-12 05:22:02

标签: c driver device

所以我开始阅读书籍http://lwn.net/Kernel/LDD3/来编写设备驱动程序

问题是本书使用的是2.6.10,而我使用的是2.6.35.X(在Ubuntu上),并且缺少“config.h”。我搜索了问题,结果发现config.h已被删除。

http://stephane.lesimple.fr/wiki/blog/kernel_2.6.18_linux_config.h_problem建议3个解决方案,前两个解决方案对我不起作用(我没有autoconf.h)。第三种解决方案是我头脑中的解决方案。如果有人能解释第3个或有其他解决方案,我会很感激。

由于

1 个答案:

答案 0 :(得分:1)

  

所有-imacros 文件和-include   在所有-D和-U选项1之后处理文件选项。

每个(三个)选项都是一种将GCC指向带有预处理器定义列表的文本文件的方法。 要使用选项3 -imacros a_file ,仍然需要文件 a_file ,(即:autoconf.h),包含宏或配置定义的文件。在这个系统上它是 /usr/src/linux/include/generated/autoconf.h

l /usr/src/linux
lrwxrwxrwx 1 root conman 23 Nov 29 19:37 /usr/src/linux -> linux-2.6.35-gentoo-r12

如您所见,此文件可以在2.6.35中出现。似乎可能配置内核生成这个文件;因为此文件的内容看起来适合当前内核。这看起来像是一个文件,声明编译了哪些驱动程序(如同编译为模块一样)。

所以:

  • 首先检查文件find /usr/src/linux/. -name autoconf.h 如果不存在,则配置内核(然后再次检查)
  • 在设备驱动程序的Makefile中更改CFLAGS以包含-imacros /usr/src/linux/include/generated/autoconf.h
      CFLAGS+=-imacros /usr/src/linux/include/generated/autoconf.h
  • 从驱动程序来源注释掉#include <config.h>

1“3.11选项控制预处理器,”GCC参考