带你了解make menuconfig

带你了解make menuconfig shmily 2024-02-22 14:27:52 903

在嵌入式领域当中,在配置内核的时候会有很多配置方法,比如说make config(基于文本的为传统的配置界面)、make oldconfig(如何只想在原来内核配置的基础上修改一部分,则会省去很多麻烦)、make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐使用)、make menuconfig(基于文本选择的配置界面,字符终端下推荐使用),以上4种配置方式的目的都是在源码的顶层目录下面生成一个.config文件,那么在我们嵌入式开发当中,经常使用的和推荐使用的是make menuconfig这种配置方法。

现在以linux-3.14.25内核为例,在内核的源码目录下面,执行make menuconfig命令。

在执行命令的时候可能出现的错误有:

  1. 一些安装包没有提前安装上;(根据错误提示依次安装)
  2. 终端窗口太小导致错误;

正常执行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配置文件的说明,还有如何添加一个选项。至于菜单中其它选项的意思和作用是什么,那就需要大家慢慢积累和查找总结了。

声明:本文内容由易百纳平台入驻作者撰写,文章观点仅代表作者本人,不代表易百纳立场。如有内容侵权或者其他问题,请联系本站进行删除。
shmily
红包 点赞 收藏 评论 打赏
评论
0个
内容存在敏感词
手气红包
    易百纳技术社区暂无数据
相关专栏
置顶时间设置
结束时间
删除原因
  • 广告/SPAM
  • 恶意灌水
  • 违规内容
  • 文不对题
  • 重复发帖
打赏作者
易百纳技术社区
shmily
您的支持将鼓励我继续创作!
打赏金额:
¥1易百纳技术社区
¥5易百纳技术社区
¥10易百纳技术社区
¥50易百纳技术社区
¥100易百纳技术社区
支付方式:
微信支付
支付宝支付
易百纳技术社区微信支付
易百纳技术社区
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

审核成功

发布时间设置
发布时间:
是否关联周任务-专栏模块

审核失败

失败原因
备注
拼手气红包 红包规则
祝福语
恭喜发财,大吉大利!
红包金额
红包最小金额不能低于5元
红包数量
红包数量范围10~50个
余额支付
当前余额:
可前往问答、专栏板块获取收益 去获取
取 消 确 定

小包子的红包

恭喜发财,大吉大利

已领取20/40,共1.6元 红包规则

    易百纳技术社区