文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

menuconfig与Kconfig入门学习

2023-09-13 08:09

关注

概述

menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。

menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行make menuconfig命令从而打开一个图形化配置界面,再通过对各项的值按需配置从而达到影响系统编译结果的目的。

Nuttx的menuconfig配置界面如下图所示:

在这里插入图片描述

menuconfig配置后的结果将会保存在对应模块根目录下的 .config 文件中。在编译时会加载.config文件中的配置项来决定编译结果。

Kconfig严格来讲是一种编程语言,它拥有自己的语法及结构。正是这些语法和结构组成了menuconfig在用户眼前不同的表现形式。

总得来说,menuconfig是Linux平台基于Kconfig用于管控代码实用工具。

常用的Kconfig语法

Kconfig,其实就是一个位于要被控制的程序模块源码目录下的文件名为 Kconfig 的普通的文本文件而已。一般来讲,都是在各个程序或模块的根目录下创建一个Kconfig用于记录所有配置该程序/模块的配置项。

然后再在其父级目录的Kconfig中通过souce code/Kconfig的形式将其引入到menuconfig系统中去。

Kconfig常用的几个知识点有以下五个:

config模块

config 配置项名    配置项类型    配置项提示语    其它选项

如下定义在Nuttx根目录下创建menu-config/Kconfig:

config KCONFIG_DEMO_ITEM1    bool    prompt "demonstate item1 for bool learning"config KCONFIG_DEMO_ITEM2    string    prompt "demonstate item2 for string learning"config KCONFIG_DEMO_ITEM3    hex    prompt "demonstate item3 for hex learning"

然后再其跟目录下的Kconfig中将此Kconfig文件加载进来:

# menu "Applications Settings"source "menu-config/Kconfig"

然后执行make menuconfig

在这里插入图片描述

最后就多出来三行:

CONFIG_KCONFIG_DEMO_ITEM1=yCONFIG_KCONFIG_DEMO_ITEM2="demo"CONFIG_KCONFIG_DEMO_ITEM3=0xEF

menuconfig模块

menuconfig可以认为是上一节 config 中的升级版。首先它自己也是一个正常的配置项,通过自己的配置值来决定另外一组配置项是否作为子菜单的形式显示出来并供用户配置。

menuconfig KCONFIG_DEMO_MENUCONFIG1    bool    prompt "menuconfig learning"if KCONFIG_DEMO_MENUCONFIG1config MENUCONFIG_SUBITEM1    bool    prompt "menuconfig subitem1"config MENUCONFIG_SUBITEM2    bool    prompt "menuconfig subitem2"endif

在这里插入图片描述
在这里插入图片描述

menu模块

如果说上一节的menuconfig是一个带了菜单功能的配置项,那么这个 menu 是一个纯粹的菜单项了。menu本身不可配置,只是用来标记其内部可能拥有子配置项。

语法:

menu "menu learning"config MENU_SUBITEM1        bool        prompt "subitem1"config MENU_SUBITEM2        bool        prompt "subitem2"config MENU_SUBITEM3        bool        prompt "subitem3"endmenu

同样添加这段代码到menu-config/Kconfig文件,执行menu config:

在这里插入图片描述

进入子选项:
在这里插入图片描述

menu项在.config中会将菜单提示语作为注释一并写入,前面几个部分在.config中的代码如下所示:

CONFIG_KCONFIG_DEMO_ITEM1=yCONFIG_KCONFIG_DEMO_ITEM2="demo"CONFIG_KCONFIG_DEMO_ITEM3=0xEFCONFIG_KCONFIG_DEMO_MENUCONFIG1=y# CONFIG_MENUCONFIG_SUBITEM1 is not set# CONFIG_MENUCONFIG_SUBITEM2 is not set## menu learning#CONFIG_MENU_SUBITEM1=yCONFIG_MENU_SUBITEM2=y# CONFIG_MENU_SUBITEM3 is not set

choice模块

choice是单选模块。具体语法如下所示:

choice         bool        prompt "choice learning"config CHOICE_ITEM1        bool        prompt "choice1"config CHOICE_ITEM2        bool        prompt "choice2"config CHOICE_ITEM3        bool        prompt "choice3"endchoice

make menuconfig如下:
在这里插入图片描述

if与depends on模块

if 与 depends on 模块都属于 config 配置项中的”其它选项“。它们的作用是等价的,都是根据指定的配置项是否被配置来决定本配置项的显示与否。

config MY_CONFIG1        bool        prompt "my config1"config MY_CONFIG2        bool        prompt "my config2" if MY_CONFIG1config MY_CONFIG3        bool        prompt "my config3"        depends on MY_CONFIG2

选中my config1后出现my config2,选中my config2后出现my config3:
在这里插入图片描述

最后,完整的Kconfig文件内容如下:

config KCONFIG_DEMO_ITEM1    bool    prompt "demonstate item1 for bool learning"config KCONFIG_DEMO_ITEM2    string    prompt "demonstate item2 for string learning"config KCONFIG_DEMO_ITEM3    hex    prompt "demonstate item3 for hex learning"menuconfig KCONFIG_DEMO_MENUCONFIG1    bool    prompt "menuconfig learning"if KCONFIG_DEMO_MENUCONFIG1config MENUCONFIG_SUBITEM1    bool    prompt "menuconfig subitem1"config MENUCONFIG_SUBITEM2    bool    prompt "menuconfig subitem2"endifmenu "menu learning"config MENU_SUBITEM1        bool        prompt "subitem1"config MENU_SUBITEM2        bool        prompt "subitem2"config MENU_SUBITEM3        bool        prompt "subitem3"endmenuchoice         bool        prompt "choice learning"config CHOICE_ITEM1        bool        prompt "choice1"config CHOICE_ITEM2        bool        prompt "choice2"config CHOICE_ITEM3        bool        prompt "choice3"endchoiceconfig MY_CONFIG1        bool        prompt "my config1"config MY_CONFIG2        bool        prompt "my config2" if MY_CONFIG1config MY_CONFIG3        bool        prompt "my config3"        depends on MY_CONFIG2

参考

Linux下menuconfig与Kconfig基础知识概

来源地址:https://blog.csdn.net/hongszh/article/details/128546570

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯