linux defconfig、 .config 、kconfig 与makefile 2014年06月25日 14:58:04

当驱动文件编写完成之后,需要将其编译进内核uimage或者编译模块(.ko),此时需要修改kconfig 和makefile文件。下面以博通平台为例,阐述下kconfig等文件的用途等,本人水平有限,如有错误之处,请不赐指正。

介绍Kconfig makefile 等文件的文章很多,可以参考:点击打开链接,这里只简单说明。

1.deconfig 文件:

一般由平台厂商提供,内核编译用做.config的参考,注意:如果,缺少该文件,无法进行编译。

文件位于:\kernel\..\arch\arm\configs\xxx_defconfig

2.kconfig 

分布在各目录下的Kconfig构成了一个分布式的内核配置数据库,每个Kconfig分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等)时,从Kconfig中读出配置菜单,用户配置完后保存到.config(在顶层目录下生成)中。

3.makefile

分布在各个目录下,用于集成编译。

4.config 文件

在内核编译时,主Makefile调用这个.config,用于或者用于的内核编译配置。当我们在内核源码目录下输入make menuconfig时,在出现的菜单界面中选择一项时,它会自动更新.config相应项的值。如果我们没有选择,则会在.config问下插入一行注释(# CONFIG_TOUCHSCREEN_GT9xx is not set)

文件位于 :kernel\...\out\xxx_defconfig\.config

上面简单介绍了各文件,为了弄清楚他们之间的关系,还需要了解内核编译的配置。

详细请阅读连接:点击打开链接Linux 内核中针对每个 ARCH 都会有一个缺省配置。在向内核代码增加了新的功能后,如果新功能对于这个 ARCH 是必需的,就要修改此 ARCH 的缺省配置。修改方法如下(在 Linux 内核根目录下)几步:

备份 .config 文件

cp arch/arm/deconfig .config

修改 .config

cp .config arch/arm/deconfig

恢复 .config 

值得注意的是:不同平台可能对缺省配置进行修改,博通平台下分析只有:第二步和第三步。我们修改kconfig 配置时需要考虑到这一点。

总之:

defconfig----->.config  (第二步)

kconfig------->.config---------->makefile(第三步)

下面在博通平台下,以具体添加一个驱动文件为例:

1 完成驱动源/头文件的实现:tps6507.c tps6507.h等

2.defconfig文件中添加:CONFIG_TOUCHSCREEN_TPS6507 

注意:考虑到规范性,这一步可以不必添加。但是不添加这一步的话,需要在第三步中设置为default y或者执行make menu时配置TPS6507 驱动。

3.源文件同目录下的kconfig添加(必须,但default y不一定):

configCONFIG_TOUCHSCREEN_TPS6507 
   tristate "TPS6507  Touchscreen"
   depends on I2C
   default y
   help
     Say Y here if you have a Tango based touchscreen. If unsure, say N.

4同目录下的make中增加:obj-$(CONFIG_TOUCHSCREEN_TPS6507X)+= tps6507x-ts.o 

经过试验,发现博通平台下,总的来讲:不管defconfig中是否配置了CONFIG_TOUCHSCREEN_TPS6507X,只要在kconfig中添加时明确default y(或者m)或者执行makemenu时选择配置该驱动,make文件配置了之后就可以将文件编译进内核。如果defconfig中配置了CONFIG_TOUCHSCREEN_TPS6507X,kconfig中添加时没有明确default y(只是没有这一句,其他config CONFIG_TOUCHSCREEN_TPS6507 等需要有),也会编译,因为首先defconfig文件会复制给.config文件,但在第三步修改.config文件时,.config中不会更新CONFIG_TOUCHSCREEN_TPS6507X这一条目。 

猜你喜欢

转载自blog.csdn.net/lisayh/article/details/81206250