我是靠谱客的博主 神勇橘子,最近开发中收集的这篇文章主要介绍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
把源码解压后放到driversnetwireless路径下
修改driversnetwireless这个目录下的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就是所有要编译进内核的源码的集合。之后发生了什么,有兴趣可以去研究内核编译过程。

最后

以上就是神勇橘子为你收集整理的linux编译配置过程,make menuconfig/.config/Kconfig的关系的全部内容,希望文章能够帮你解决linux编译配置过程,make menuconfig/.config/Kconfig的关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部