编译linux内核时.config ,Kconfig, make menuconfig的联系
我们在编译linux内核时都会用到几个文件 .config文件 Kconfig文件 Makefile文件以及make menuconfig命令出现的菜单,那他们之间有什么联系呢?
首先,Makefile文件不用多讲,这是linux内核的编译文件,使用make uImage或make zImage时就是用Makefile文件来编译的。
对于make menuconfig来讲,这是一个菜单配置内核文件,菜单文件中主要包括下面几种情况
(1)[ ] 方括号类型
按下空格键来选择,
* <====> y 如果选择为y,则代表该配置选项(功能)被编译进内核
make uImage (led.c驱动要放在对应目录中)
空格 不选
(2)< > 尖括号类型
有三种状态 *代表选中 没有*代表未选中 M代表模块
M <====> M 编译成模块 ,没有编译成内核。使用时可以通过make modules 生成.ko文件,然后手动加载。
(3)( )圆括号类型
某个小括号可能存放了十进制整数,也可能存放十六进制整数,还有可能存放字符串。
上图是make menuconnfig中字符驱动下的菜单显示
Kconfig和make menuconfig是一一对应的。源码下有多个Kconfig文件,对应make menuconfig中的每一页。我们看一下源码下的Kconfig
和主菜单(下图)实际上是一样的,最后一行是包含的目录,这样就可以继续向下寻找了。
简单了解一下在Kconfig中的语法规则,我们来看一下驱动中字符设备中的Kconfig
菜单中对应如下
首先是
第一行 config XXXXXXX 打头的,这里的XXXXXX是要和.config配合使用的
第二行 是对应刚才说的[] <> ()三种类型以及显示在menu中名字,
bool 对应[]
tristate 对应<> triple state 三态的简称
string 对应()
后面引号中跟着的是显示在menu中信息
第三行 设置一下默认值 y代表是选中 n为不选中
第四行 可以添加一些帮助信息给用户显示
要添加一个模块,就根据类似写法在Kconfig中添加 就能在make menuconfig中显示了。
对于.config属于内核的配置文件,我们来看一看对应的字符驱动
之前说到Kconfig中的第一行会和.config产生联系,.config中会自动在Kconfig中起的名字前加上大写的CONFIG_。y表示选中。这个配置是如何起作用的呢?
我们来看看对应驱动字符设备的Makefile
是否编译对应文件 就看CONFIG_XXXXX设置为何值了。
添加一个模块 要在两个地方进行添加,1是在对应文件的Kconfig中添加,然后就进入make menuconfig中设置,设置完.config中就自动有了对应的配置。2然后在对应的Makefile中进行编译配置。