首先要知道,内核配置跟三类文件有关,包括.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 DriversNetwork device supportWireless LANRealtek 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的关系相关推荐

  1. linux下make menuconfig在什么目录,make menuconfig/.config/Kconfig解析

    在对linux进行编译,常用的命令是make menuconfig,使用图形界面来对整个系统进行裁剪.当然,除了这条指令,还包括很多配置命令,比如make defconfig, make oldcon ...

  2. linux 内核配置过程中遇到的问题

    大家都知道在修改内核需要两步 配置和编译 在配置过程中 用到的命令 make config.make menuconfig.make xconfig 前两个是文本界面 最后一个是图形界面 不建议用最后 ...

  3. linux 编译链接过程,编译程序 一:linux程序编译过程(一)-编译和链接

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  4. linux 编译配置内核路由功能,Linux下多播路由的实现-网管专栏,防火墙和路由

    前言(只是一些废话,不想看的可以略过) ===================================== 多播路由是一个很好的技术,在internet上实现了对数据的"广播&quo ...

  5. linux 编译配置内核路由功能,嵌入式Linux2.6路由功能的实现

    1 Linux2.6路由分析 1.1静态与动态路由 静态路由是网络管理员再已知网络拓扑情况下手动添加的路由信息:而动态路由则是路由器根据对网络拓扑变化的检测动态改变路由信息.静态路由,linux2.6 ...

  6. RedHat Linux网络配置过程笔记

    在 Linux 系统中,TCP/IP 网络是通过若干个文本文件进行配置的,需要编辑这些文件来完成联网工作.在RedHat linux刚安装好后可以通过图形化界面来配置,以下介绍通过命令行配置网络 用c ...

  7. Linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成   那么如何将驱动直接编译进内核 ...

  8. linux内核的配置过程,linux内核的配置机制及其编译过程

    linux内核的配置机制及其编译过程. 一.配置系统的基本结构 Linux内核的配置系统由三个部分组成,分别是: 1.Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linu ...

  9. linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解-转

    前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式--在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? ...

最新文章

  1. 使用Mask-RCNN在实例分割应用中克服过拟合
  2. 【 Linux 】创建、查看、删除文件
  3. C# 参考之访问关键字:base、this
  4. input placeholder样式
  5. Leaflet中使用leaflet.easyPrint插件实现打印效果
  6. 2021云数据库RDS重磅升级发布会
  7. Spring 的优点
  8. Python基本操作(三)标准运算符与赋值
  9. perl的几个小tips
  10. Linux下安装matlab2014a
  11. Win32 SDK创建ListView控件
  12. 趣味记忆5大经典的软件架构风格
  13. 巨额商誉,谁来买单?
  14. VS在新建或者导入项目时出现“不支持此接口(Exception from HRESULT:0x80004002 (E_NONINTERFACE))”的解决办法
  15. 定级阿里P7,300道Java面试题帮你全副武装
  16. QGC编译报错error C2220: 警告被视为错误 最佳解决方法
  17. 个人永久性免费-Excel催化剂功能第98波-零代码零距离轻松接触并拥有金融大数据...
  18. OpenGL编程轻松入门之显示例表
  19. js 正则表达式详解
  20. LeetCode每日刷题Day10---L938二叉搜索树的范围和

热门文章

  1. dede/archives_do.php,dedecms后台编辑文章时archives_do.php显示空白解决办法
  2. json 反序列化 父子类型_json类序列化与反序列化参考
  3. js layui 弹出子窗体_Layui中JS实现弹出层的应用
  4. Linux端日志加密,Linux学习--第十三天--日志、系统运行级别、grub加密
  5. VR不仅用于游戏!HTC Vive显示美国市长VR用于城市规划
  6. [UE4]网游中角色Pawn的移动位置同步以及RTS多角色同时移动的解决方案
  7. JAVA实现调整数组顺序使奇数位于偶数前面问题(《剑指 offer》)
  8. 一个模型搞定图像标注、读图问答两件事,VQA准确率逼近人类水平 | Demo可玩...
  9. 谷歌“升维打击”:还原任意角度光照立体效果,2D变“4D”!
  10. 超过Google,微信AI在NLP领域又获一项世界第一