Kconfig解析
编译内核时用于配置的Kconfig文件
以内核中的ttyprintk.c为例,其位于/kernel-sources/dirver/char/ttyprintk.c
如何将其编译进内核?
在char目录下有Kconfig文件,其中有如下内容
tristate 表示该模块可以选择 Y N M(以.ko形式),后面为该模块的描述,
如果是bool则表示该模块只能选择 Y Ndepends on EXPERT && TTY 表示依赖关系,其同时依赖EXPERT 和 TTY default n 表示默认为关闭help下面的内容为提醒信息,在menuconfig中找到该模块,键入?可以查看help如下图
如何编译进内核?
当在menuconfig配置为yes后,会在.config中生成相关配置,以ttyprintk为例,在.config中会生成以下内容
CONFIG_TTY_PRINTK=y
在内核代码中会有以下内容
#ifdef CONFIG_TTY_PRINTK
// 相关的代码,当 CONFIG_TTY_PRINTK 被定义时编译
#endif
在ttyprintk.c的同级Makefile中有
obj-$(CONFIG_TTY_PRINTK) += ttyprintk.o
CONFIG_TTY_PRINTK被定义为y,因此会编译ttyprintk.o
添加自己的驱动代码目录和子目录
如何添加自己的驱动代码,结构如在
在char下添加test目录,其中test.c为main函数文件,在Kconfig中配置如下
Makefile如下
这里需要注意下,我们是在test 目录下创建了Kconfig,因此还需要再char目录下的Kconfig中添加
source “/driver/char/test/Kconfig”
如果test目录下没有单独创建Kcofig,则只需要将
直接添加到char/Kconfig中即可。
menuconfig中可以查看到我们新添加的TEST
bitbake -c menuconfig -f linux-imx
打开test的开关后,在.config文件中可以看到
CONFIG_TEST = y
注意当我们使用yocto编译内核时有两个路径都存在kernel的源码
1.build/tmp/work/imx6ull14x14evk-poky-linux-gnueabi/linux-imx/5.4-r0/build
该路径下存放的是真正意义上的源码,包含.config文件
2./build/tmp/work-shared/imx6ull14x14evk/kernel-source
这个目录是为了支持在多个不同的构建任务之间共享内核源代码而设置的,不包含.config文件