700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux编译配置过程 make menuconfig/.config/Kconfig的关系

linux编译配置过程 make menuconfig/.config/Kconfig的关系

时间:2021-09-12 23:51:48

相关推荐

linux编译配置过程 make menuconfig/.config/Kconfig的关系

首先要知道,内核配置跟三类文件有关,包括.config,Kconfig,Makefile,其中.config只有根目录下有,

Kconfig和Makefile在根目录和每个子目录都有,先说下他们的功能:

Kconfig:定义配置项Makefile:说明配置项的编译方法.config:控制配置项编译进内核、编译成模块还是不编译

比如我要添加个wifi功能,那么首先要在网络的子目录下的Kconfig里面添加这个wifi功能的描述,添加下面内容:

config MY_TEST_WIFIbool “My Test wifi”

然后再在这个目录下的Makefile文件中添加这个wifi功能的编译方法,比如依赖哪些c文件和h文件,添加如下内容:

obj-$(CONFIG_MY_TEST_WIFI) += mytestwifi.o

最后再在根目录下的.config文件中添加这个功能的开关,控制这个功能直接编译进内核源码,添加如下内容:

CONFIG_MY_TEST_WIFI = y

这样就完成了新功能的添加。

make menuconfig生成的图形配置界面是根据Kconfig来的,具体的Kconfig语法看这里。当我们修改了驱动中的Kconfig文件

再次make menuconfig,就可以看到我们添加的wifi设备了:

按“y”把它编译进内核,保存

就可以看到根目录下的.config文件中,有了:

因此配置内核,我们就可以得到下面结论了:

1、添加功能涉及到3类文件:.config,Kconfig,Makefile。在Kconfig中描述功能,在Makefile中描述功能编译方法,在.config中打开功能。

2、.config可以不修改,因为修改Kconfig后,make menuconfig中就有对应条目了,在图形界面中修改对应条目实际上就是修改.config。

3、如果新的功能都添加完了,那么.config控制着每个功能的开关,因此是很重要的。make clean会清除它,因此幸幸苦苦make menuconfig裁剪完功能后,推荐它备份一下。

4、make %_defconfig命令会将arch/arm/configs/%_defconfig 文件复制为根目录下的.config 文件。因此作用和make menuconfig相同。

这么一看要添加新功能好像很容,要添加新的驱动也很容易。再用一个例子巩固下。

给开发板添加RTL8723BU驱动。

去官方上下载RTL8723BU驱动源码,地址:/lwfinger/rtl8723bu

把源码解压后放到\drivers\net\wireless\路径下

修改\drivers\net\wireless\这个目录下的Makefile和Kconfig文件

在Kconfig文件中添加以下部分

source "drivers/net/wireless/rtl8723BU/Kconfig"

这样我们就可以在make menuconfig中配置这个驱动

在Makefile文件中添加以下部分

obj-$(CONFIG_RTL8723BU) += rtl8723BU/

接下来就make menuconfig

但是我们不仅要加载这个驱动,还需要配置内核使其支持wifi和usb,因为RTL8723是通过USB接在开发板上面的

1.支持USB设备

2.支持WIFI设备

3.支持无线网络IEEE 802.11

最后是我们的RTL8723

我们选择将其编译为模块

Device DriversNetwork device supportWireless LANRealtek 8723B USB WiFi

然后我们编译内核

make XXXconfig(XXXconfig是你自己的配置文件)make zImagemake modules就会生成8723bu.ko

那么当make的时候,发生了什么呢?为什么新的wifi功能就被编译进内核了呢?

我们make menuconfig

CONFIG_MY_TEST_WIFI = y

然后makefile中有:

obj-$(CONFIG_MY_TEST_WIFI) += mytestwifi.o

带入CONFIG_MY_TEST_WIFI = y有:

obj-$y += mytestwifi.o

obj-$y就是所有要编译进内核的源码的集合。之后发生了什么,有兴趣可以去研究内核编译过程。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。