广告
返回顶部
首页 > 资讯 > 服务器 >menuconfig与Kconfig入门学习
  • 482
分享到

menuconfig与Kconfig入门学习

学习linux服务器 2023-09-13 08:09:40 482人浏览 薄情痞子
摘要

概述 menuconfig是linux平台用于管理代码工程、模块及功能的实用工具。 menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行make menuconfig命令从而打开

概述

menuconfiglinux平台用于管理代码工程、模块及功能的实用工具

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

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

在这里插入图片描述

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

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

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

常用的Kconfig语法

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

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

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

  • config模块
  • menuconfig模块
  • menu模块
  • choice模块
  • if 与 depends on 模块

config模块

config 配置项名    配置项类型    配置项提示语    其它选项
  • 配置项名表示最终保存在 .config 文件中的键值对项的键名,通常用全大写和单词之间以下划线隔开的形式书写。
  • 配置项类型就是基础类型,可选的类型有:bool、tristate、string、hex、int。
  • bool 表示布尔型在.config中以 y 和 n 表示。
  • tristate是三态类型,通常用在内核驱动控制中。在.config中以 y 、n和m表示。y表示将驱动编译进内核镜像,n表示不编译,m表示将驱动编译为ko形式。
  • string是普通字符串类型,直接将在menuconfig图形界面中用户输入的值原样保存在.config中。
  • hex是十六进制形式,只能输入0~F的内容。
  • int是十进制整数形式,只能输入数字。
  • 配置项提示语以prompt开头,后跟一个空格字符,然后就是用双引号包围的文字提示语。

如下定义在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
  • 第一行通过menuconfig配置了一个bool类型的配置项。

  • 如果选中了menuconfig learning,就会出现下面第二张图的自选项,否则是没有的:

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

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

--结束END--

本文标题: menuconfig与Kconfig入门学习

本文链接: https://www.lsjlt.com/news/405564.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • menuconfig与Kconfig入门学习
    概述 menuconfig是Linux平台用于管理代码工程、模块及功能的实用工具。 menuconfig的使用方式通常是在编译系统之前在系统源代码根目录下执行make menuconfig命令从而打开...
    99+
    2023-09-13
    学习 linux 服务器
  • Android --Room入门分析与学习
    Room Room 持久性库在 SQLite 的基础上提供了一个抽象层,让用户能够在充分利用 SQLite 的强大功能的同时,获享更强健的数据库...
    99+
    2022-06-06
    学习 Android
  • python入门学习
    首先在官网下载好python3.6及以上的版本,根据自己的系统选择:没有显示64位的就是32位的安装包,选择蓝线的能够直接打开 在控制台输入python,配置成功的图片如下: 从IDLE打开python输入指令 print("I lo...
    99+
    2023-01-31
    入门 python
  • MySQL入门学习
    ...
    99+
    2015-02-25
    MySQL入门学习
  • Node.js学习入门
    开始之前,安利一本正在看的书《站在两个世界的边缘》,作者程浩,上帝丢给他太多理想,却忘了给他完成理想的时间。OK,有兴趣的可以看一看。 node.js如标题一样,我也是刚开始接触,大家一起学习,有不当的地方...
    99+
    2022-06-04
    入门 Node js
  • Oracle入门学习三
    上一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=26 字符串函数:length、upper、lower、initcap、 concat、instr...
    99+
    2021-08-20
    Oracle入门学习三
  • Oracle入门学习五
    学习视频: https://www.bilibili.com/video/BV1tJ411r7ECp=35 数据的完整性:保证插入表格的数据必须正确。包括实体完整性、区域完整性、引用完整性、自定义完整性。 约束:约束的作用是为了保...
    99+
    2022-04-01
    Oracle入门学习五
  • Oracle入门学习六
    事务:把一组操作看做一个工作单元,要么都执行,要么都不执行。dml操作才有事务,查询没有事务。 开始事务:从上一次的事务结束之后,从第一次dml操作,就自动开启了事务 提交事务:commit 回滚事务:rollback cr...
    99+
    2021-12-10
    Oracle入门学习六
  • Oracle入门学习一
    oracle的安装,用户授权,表格操作,数据类型,ddl表格,dml数据。 下一篇:Oracle入门学习二 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 安装教程附带...
    99+
    2018-09-30
    Oracle入门学习一
  • Oracle入门学习二
    上一篇:Oracle入门学习一 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=15 算术运算符:+ - * / 逻辑运算符:and or not 比较运算符:“=”、“”、“=...
    99+
    2014-07-13
    Oracle入门学习二
  • Oracle入门学习四
    上一篇:Oracle入门学习三 学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=35 Oracle表连接:内连接、外连接。外连接分左连接、右连接。 多表查询时,如果表之间没有条件...
    99+
    2017-05-24
    Oracle入门学习四
  • Django 入门学习(3)
    在例4的基础上,我希望直接保存数据到数据库中。 Django自带了一个sqlite的数据库,已经配置好了 可以直接使用。使用方式和sqlalchemy类似,相当于一个内置的ORM框架。settings.py 默认已经绑定了sqlite3DA...
    99+
    2023-01-31
    入门 Django
  • Python入门学习(六)
    在熟悉了Python中常用的一些内置函数, 那接下来我们定义一个自己的函数吧 def add(x, y): return x + y 函数 函数语法 def functonname(parameters): ... ...
    99+
    2023-01-31
    入门 Python
  • 【Java】学习《入门偏》(2)
    ⭐简单说两句⭐ 作者:后端小知识 CSDN个人主页:后端小知识 🔎GZH:后端小知识 🎉欢迎关注🔎点赞👍收藏⭐️留言...
    99+
    2023-10-21
    java 学习 开发语言 后端
  • PyTorch 深度学习入门
    💂 个人网站:【 海拥】【萌怪大冒险】【2048】🤟 风趣幽默的前端学习课程:👉28个案例趣学前端💅 想寻找共同学习交流、摸鱼划水的...
    99+
    2023-09-25
    pytorch 深度学习 python
  • CTFAWD入门学习手册
    目录引文站点部署dump源码数据库备份修改密码关闭不必要端口部署WAF攻击(ATTACK)弱口令自带后门nmapWEB攻击写入木马bash反弹shell不死马提交脚本防御(DEFEN...
    99+
    2022-11-13
    CTF AWD入门手册 CTF AWD
  • scrapy入门学习(原理)
    什么是网络爬虫网络爬虫又称网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。如果有兴趣可查看百度百科网络爬虫网络蜘蛛(web spider)也叫网络爬虫,是一种'自动化浏览网络'的程序,或者说是...
    99+
    2023-01-30
    入门 原理 scrapy
  • Oracle(PLSQL)入门学习七
    学习视频:https://www.bilibili.com/video/BV1tJ411r7ECp=74 设计数据库步骤: 良好的数据库设计:节省空间,数据完整,方便开发。 步骤:1、收集信息 2、标识实体 3、标识实体属性 4、...
    99+
    2017-10-20
    Oracle(PLSQL)入门学习七
  • java入门学习之路
    java是面向对象的编程,个人觉得记忆比较重要。第一阶段java基础部分unix开发环境熟练掌握开发中常用的操作系统linux的安装及使用:掌握文件系统、网络、用户管理方法:能熟练使用vi和vim进行文件编...
    99+
    2022-10-18
  • Python 入门学习笔记
    1 安装Anaconda和jupyter notebook   之前没有听说过这两个名词,然后看完介绍,按照我自己的理解,Anaconda是一个集合很多环境和模块的存储地方。 Jupyter notebook 就是一个可以在此环境里打代码...
    99+
    2023-01-30
    学习笔记 入门 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作