当驱动文件编写完成之后,需要将其编译进内核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这一条目。