2010-12-12 159 views
1

于是我开始读这本书http://lwn.net/Kernel/LDD3/编写设备驱动程序设备驱动程序丢失的config.h

的问题是这本书我用2.6.35.X(在Ubuntu)和“配置,而用2.6.10 .h“缺失。我GOOGLE了这个问题,结果是config.h被删除。

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

感谢

回答

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 如果它不存在,然后配置内核(再检查一遍)
  • 变化CFLAGS在设备驱动程序的Makefile包括-imacros /usr/src/linux/include/generated/autoconf.h
    CFLAGS+=-imacros /usr/src/linux/include/generated/autoconf.h
  • 从驱动程序源注释掉#include <config.h>

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