带你了解make menuconfig
在嵌入式领域当中,在配置内核的时候会有很多配置方法,比如说make config(基于文本的为传统的配置界面)、make oldconfig(如何只想在原来内核配置的基础上修改一部分,则会省去很多麻烦)、make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)、make menuconfig(基于文本选择的配置界面,字符终端下推荐使用),以上4种配置方式的目的都是在源码的顶层目录下面生成一个.config文件,那么在我们嵌入式开发当中,经常使用的和推荐使用的是make menuconfig这种配置方法。
现在以linux-3.14.25内核为例,在内核的源码目录下面,执行make menuconfig命令。
在执行命令的时候可能出现的错误有:
- 一些安装包没有提前安装上;(根据错误提示依次安装)
- 终端窗口太小导致错误;
正常执行make menuconfig之后会出现下面的菜单框:
大家可能有疑问,这个界面是通过什么来生成的呢?其实也很容易会知道,当我们执行make menuconfig后,肯定会执行Makefile,那么我们打开Makefile文件来寻找menuconfig这个目标,但是是搜索不到的,这里有个技巧,我们使用%config来搜索,%是通配符的意思,会搜索到相关目标:
那么我们就会看到,绘制图形和解析这个界面的文件都会在scripts/kconfig目录下面,比较重要的文件有mconf.c和lxdialog目录。如果感兴趣的话可以研究,这里就不详细说明了。
进入菜单之后我们可以看到有标题、有说明性的文字、和关键的选项。它们又是如何呈现在菜单中的呢,其实系统会读取源码目录下面Kconfig文件,Kconfig文件是一个帮助内核添加内核选项的一个配置文件,打开这个Kconfig文件可以看到:
大家可以观察到,我们打开的菜单是有很多的选项的,既然Kconfig是一个添加选项的配置文件,那么这个文件中为什么这么少的内容呢,其实关键点在 source “arch/$SRCARCH/Kconfig”,这句话的意思就是调用其它目录下面的Kconfig文件,所以我们需要打开arch/$SRCARCH/Kconfig文件,但是SRCARCH这个变量的值又是如何确定的呢?很简单,它是在源码顶层目录下的Makefile中赋值的,ARCH=arm,所以我们需要进入到arch/arm/Kconfig文件中,进来之后大家就会看到非常多的选项了,同时也会调用很多各个目录下面的Kconfig文件。
那么大家一定页想知道每一个选项时如何写的呢?这个Kconfig文件的语法格式时什么样子的呢?下面我们来看一下:
1、每条选项的前面可以看到[ ]、< >、( )三种表示方式
[ ] 有两种状态,代表选中,没有代表未选中;
选中的意思是对应的选项功能会被编译进内核镜像文件中;
< > 有三种状态,代表选中,没有代表未选中,M代表模块;
( ) 存放十进制或十六进制或字符串;
2、mainmenu “字符串描述信息”, 它只用一次,我们一般不用修改;
3、menu “Device Drivers”…endmenu,表示Device Drivers是一个子选项菜单,每一个选项是包含在drivers/bus/Kconfig文件中的。
4、[ ]、< >、( )如何表示的及后面跟着的选项字符串是如何得来的呢?
这里我们自己添加一个选项在Device Drivers中的Character devices中;
FS4412_LED Device Support选项;
那么我们就需要在drivers/char/下的Kconfig文件中添加内容。如图所示:
config 是一个关键字,对应的是一个选项配置;
如果FS4412_LED Device Support选项被选中为*,则保存配置之后会在源码目录下面的.config文件中出现CONFIG_FS4412_LED的配置项并赋值为y;这个.config文件就是配置内核后生成的保存配置信息的文件。
Tristate是表示 < >的,bool是表示[ ]的,string是表示( )的;
Depends on表示此选项会依赖其它选项配置,也就是说当ARCH_EXYNOS4这个选项被选择上之后,该选项才能被选择;
help是帮助信息;
default y表示该选项默认被选择上。
以上就是make menuconfig的一些用法和注意事项,后说明一点,当我们添加了选项并修改配置选项之后,保存退出菜单,会在源码目录下面生成一个.config文件,在该文件中会找到一个我们后添加的配置项;
这里表示当我们在编译内核的时候,该选项(led驱动)会被编译进内核uImage中,但是我们还需做一步工作就是在drivers/char/Makefile中添加一句话:
在我们编译uImage的时候,这个led的驱动才会被编译进内核,这里还需要注意一点就是这个led的驱动代码一定要是在drivers/char的目录下面存在的,否则之前做的都是无用功。
以上就是关于make menuconfig的一些介绍,包括Kconfig的语法和.config配置文件的说明,还有如何添加一个选项。至于菜单中其它选项的意思和作用是什么,那就需要大家慢慢积累和查找总结了。
- 分享
- 举报
-
浏览量:11458次2020-12-09 20:55:40
-
浏览量:3473次2020-02-28 16:25:43
-
浏览量:6133次2020-12-29 18:07:19
-
浏览量:2475次2020-08-21 14:05:19
-
浏览量:9289次2020-12-04 13:56:35
-
浏览量:3878次2023-07-11 13:42:21
-
浏览量:4354次2023-07-12 18:38:39
-
浏览量:3146次2022-03-26 09:00:14
-
浏览量:3466次2021-04-22 10:32:33
-
浏览量:2319次2020-07-10 16:39:36
-
浏览量:1947次2020-05-14 16:48:21
-
浏览量:1926次2020-05-25 10:38:01
-
浏览量:4741次2021-08-31 14:02:41
-
浏览量:3470次2019-11-19 08:57:44
-
浏览量:1367次2022-12-26 08:58:42
-
浏览量:2323次2019-09-26 16:58:56
-
浏览量:2294次2020-07-04 10:07:27
-
浏览量:1234次2019-11-14 09:24:25
-
浏览量:2943次2017-12-02 21:41:08
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
shmily
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明