我是靠谱客的博主 神勇橘子,这篇文章主要介绍linux编译配置过程,make menuconfig/.config/Kconfig的关系,现在分享给大家,希望可以做个参考。

  首先要知道,内核配置跟三类文件有关,包括.config,Kconfig,Makefile,其中.config只有根目录下有,
Kconfig和Makefile在根目录和每个子目录都有,先说下他们的功能:

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

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

复制代码
1
2
3
config MY_TEST_WIFI bool “My Test wifi”

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

复制代码
1
2
obj-$(CONFIG_MY_TEST_WIFI) += mytestwifi.o

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

复制代码
1
2
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驱动源码,地址:http://github.com/lwfinger/rtl8723bu
把源码解压后放到driversnetwireless路径下
修改driversnetwireless这个目录下的Makefile和Kconfig文件
在Kconfig文件中添加以下部分

复制代码
1
2
source "drivers/net/wireless/rtl8723BU/Kconfig"

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

在Makefile文件中添加以下部分

复制代码
1
2
obj-$(CONFIG_RTL8723BU) += rtl8723BU/

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

1.支持USB设备
在这里插入图片描述
2.支持WIFI设备
在这里插入图片描述

3.支持无线网络IEEE 802.11
在这里插入图片描述
最后是我们的RTL8723
在这里插入图片描述

我们选择将其编译为模块

复制代码
1
2
3
4
5
Device Drivers Network device support Wireless LAN Realtek 8723B USB WiFi

然后我们编译内核

复制代码
1
2
3
4
make XXXconfig(XXXconfig是你自己的配置文件) make zImage make modules就会生成8723bu.ko

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

复制代码
1
2
CONFIG_MY_TEST_WIFI = y

然后makefile中有:

复制代码
1
2
obj-$(CONFIG_MY_TEST_WIFI) += mytestwifi.o

带入CONFIG_MY_TEST_WIFI = y有:

复制代码
1
2
obj-$y += mytestwifi.o

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

最后

以上就是神勇橘子最近收集整理的关于linux编译配置过程,make menuconfig/.config/Kconfig的关系的全部内容,更多相关linux编译配置过程,make内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(116)

评论列表共有 0 条评论

立即
投稿
返回
顶部