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

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

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

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

config MY_TEST_WIFI
bool “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驱动源码,地址:http://github.com/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 Drivers
             Network device support
                 Wireless LAN
                      Realtek 8723B USB WiFi

然后我们编译内核

make XXXconfig(XXXconfig是你自己的配置文件)
make zImage
make 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就是所有要编译进内核的源码的集合。之后发生了什么,有兴趣可以去研究内核编译过程。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【ql君】qlexcel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值