嵌入式Linux--menuconfig详解

2023-10-29

menuconfig

1.简介

menuconfig是一套图像化配置工具,由ncurses库提供软件支持。ncurses库提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面
menuconfig本身的软件只负责提供menuconfig工作的这一套逻辑,比如说通过上下左右调整光标,Enter选中等,并不负责提供内容。menuconfig运行之后会读取Kconfig、读取/写入.config文件,Kconfig提供菜单项的内容,.config用来记录菜单项的选择值。

2.用法

内核源码目录下make menuconfig就会进来,箭头按键导航整个菜单,回车按键选择子菜单(注意选项后面有 —>的选项才是有子菜单的,没有这个标识的没有子菜单),高亮的字母是热键(快捷键),键盘按键Y、N、M三个按键的作用分别是将选中模块编入、去除、模块化。双击ESC表示退出,按下?按键可以显示帮助信息,按下/按键可以输入搜索内容来全局搜索信息(类似于vi中的搜索),[ ]不可以模块化,< >的才可以模块化。

注:linux内核中一个功能模块有三种编译方法:一种是编入、一种去去除、一种是模块化。所谓编入就是将这个模块的代码直接编译连接到zImage中去,去除就是将这个模块不编译链接到zImage中,模块化是将这个模块仍然编译,但是不会将其链接到zImage中,会将这个模块单独链接成一个内核模块.ko文件,将来linux系统内核启动起来后可以动态的加载或卸载这个模块。
在menuconfig中选项前面的括号里,*表示编入,空白表示去除,M表示模块化。

3.配置菜单界面启动流程

执行make menuconfig的时候,会执行顶层目录下的Makefile。

%config: scripts_basic outputmakefile FORCE
	$(Q)mkdir -p include/linux include/config
	$(Q)$(MAKE) $(build)=scripts/kconfig $@
$(build)=scripts/kconfig,build是编译规则,$(build)=scripts/kconfig
实质是:-f scripts/kconfig/Makefile
则:$(Q)$(MAKE) $(build)=scripts/kconfig $@ 等同于 
make -f scripts/kconfig/Makefile menuconfig
-f:指定执行某个Makefile文件,表示到scripts/kconfig目录下Makefile文件中,生成目标menuconfig。

这里写图片描述
Q的值根据KBUILD_VERBOSE的值来决定,Q=空时会打印命令信息,Q=@时隐藏命令信息。
这里写图片描述
MAKE为系统内置变量,可以参考这篇文章打印

绘制图形和解析这个界面的文件都会在scripts/kconfig目录下面,比较重要的文件有mconf.c和lxdialog目录。

接下来,scripts/kconfig/Makefile 找到目标所在的代码:

menuconfig: $(obj)/mconf
	$< $(Kconfig)

obj := $(CURDIR)
Kconfig := arch/$(SRCARCH)/Kconfig
SRCARCH := $(ARCH)

而变量在顶层目录的Makefile中早已赋值arm,所以:

menuconfig: scripts/kconfig/mconf
      scripts/kconfig/mconf  arch/arm/Kconfig

当我们执行命令make menuconfig时,(1)先创建两个二级目录include /linux 和 include/config,(2)接着把scripts/kconfig/里面的可执行文件mconf运行起来,有能力的话可以详看scripts/kconfig/mconf.c,根据文件arch/arm/kconfig内容,显示出一个菜单界面。其实,mconf运行起来,首先是“画出”菜单界面(显示内容则根据各级目录的Kconfig文件),然后查看源码顶层目录有没有存在.config文件,若没有,则按照默认显示到菜单里面;若存在.config,则会把它读出来存到内存某块区域,在逐行逐行解析它的内容,再把读出的内容更新到菜单。最后会保存在源码顶层的.config文件中。


Kconfig文件语法

kconfig的总入口是arch/arm/kconfig,不是源码顶层的kconfig,入口一定是根据某款平台的。
这里写图片描述

1.tristate、bool、string

bool:[ ]有两种状态,*代表选中,空代表未选中;
tristate:< >有三种状态,*代表选中,空代表未选中,M代表模块;
string:( )存放十进制或者十六进制字符串;

2.mainmenu

如果配置程序选择了使用它,那么就用它配置程序的标题栏。

mainmenu "Linux Kernel Configuration"

config ARM
	bool
	default y
	select HAVE_AOUT
	select HAVE_IDE

3.config

开启一个新的配置选项入口,下面的行定义了配置选项的属性,属性可以是配置输入提示、依赖、帮助文档和默认值等,一个配置选项可以被多次定义,但是每一次定义只有单一的输入提示,并且类型不能冲突。

config MODVERSIONS
	bool "Set version information on all module symbols"
	depends on MODULES
	help
	  Usually, modules have to be recompiled whenever you 
	  switch to a newkernel.  ...

4.prompt

输入提示作用,下面两种方式,效果相同。

bool "Networking support"
  and
bool
prompt "Networking support"

5.depends on、select

depends on 表示此选项会依赖其它选项的配置,也就是BAR被选择之后,该选项才能被选择;select 表示反向依赖,如果当前项选中,那么也选中select后的选项。

6.default

用于设定默认值,y表示该选项默认被选择上。

	bool "foo" if BAR
	default y if BAR
  and
	depends on BAR
	bool "foo"
	default y

7.menu

定义一个菜单入口, 表示Network device support是一个菜单选项。

menu "Network device support"
	depends on NET

config NETDEVICES
	...
endmenu

8.source

将另外一个Kconfig文件直接复制到当前位置,可以将这个系统贯穿在一起。从开始位置arch/arm/Kconfig,来将整个系统都作为配置型。

config ARM_L1_CACHE_SHIFT_6
	bool
	help
	  Setting ARM L1 cache line size to 64 Bytes.

source "init/Kconfig"

这里写图片描述

9.help

帮助信息,告诉我们这个配置项的含义,以及如何去配置他。


.config

“.config文件中每一行都是一个配置项,从.config文件的规模可以看出linux内核的可配置项有两三千个。所以linux内核是高度可配置的,而且linux内核的所有配置项很难全部搞明白。因为linux内核的配置项太多太繁杂超出了人的大脑能够记忆和处理的数量级,因此linux内核不像uboot那样直接手工配置,而是发明了一个图形化的配置工具menuconfig。”

menuconfig的终极目标就是让我们更容易地配置.config文件。一般厂商会提供他们配置好的.config文件,里面配置好了大部分的必要功能,如果我们自己需要修改,那么就可以通过menuconfig来修改配置。

(1)menuconfig中config后面空格隔开的大写字母表示的类似于 NETDEVICES 的就是这个配置项的配置项名字,这个字符串前面添加 CONFIG_ 后就构成了.config中的配置项名字。
(2)这个.config中的配置值(=y、=m、=n)会影响最终的编译链接过程。如果=y则会被编入(built-in),如果=m会被单独连接成一个ko模块,如果=n则对应的代码不会被编译,这些都是通过makefile实现的。
(3).config中的配置值指导整个编译连接过程。


参考文章:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式Linux--menuconfig详解 的相关文章

  • [Pytorch系列-51]:循环神经网络RNN - torch.nn.RNN类的参数详解与代码示例

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121505015 目录 第1章 RNN
  • 四书 - 中庸

    天命之谓性 率性之谓道 修道之谓教 道也者 不可须臾离也 可离非道也 是故君子戒慎乎其所不睹 恐惧乎其所不闻 莫见乎隐 莫显乎微 故君子慎其独也 喜怒哀乐之未发 谓之中 发而皆中节 谓之和 中也者 天下之大本也 和也者 天下之达道也 致中和
  • 优化分页查询

    前言 很多时候 我们写分页查询的时候 只是单纯的想把结果查询出来就好了 但是有没有想过 自己写的分页查询效率会怎么 数据少的是没太大影响 但是多了就会有影响了 所以这篇简单介绍下分页查询的一些基本优化 比如下面的sql select a b
  • 定时超时任务

    一个有用的类 Description ClassName TaskRunnable Date 2022 1 27 16 53 Author 王东平 Slf4j public class Task 任务ID private String id
  • 将数据库中的数据导出为excel表格——java学习笔记

    最近我的项目增加了一个需求 需要将数据库中的数据导出到excel表格中 再下载下来 而生成Excel比较有名的框架有Apache poi等 网络上介绍其使用方法的文章也很多 但是我今天使用的是阿里出的easyexcel框架 我个人感觉使用起
  • mysql安装

    MySQL安装踩的坑 装MySQL卡了一天 一 卸载MySQL 先是文档安装路径里要删干净 C盘里看看有没有MySQL残留数据 3 控制面板 4 注册表 路径1 计算机 HKEY LOCAL MACHINE SYSTEM ControlSe
  • office2019选框虚线_Microsoft Office Visio如何绘制虚线?Microsoft Office Visio绘制虚线的方法步骤...

    Microsoft Office Visio如何绘制虚线 最近有很多小伙伴表示对于Microsoft Office Visio绘制虚线还不是很了解 那么今天的教程小编就给大家带来Microsoft Office Visio绘制虚线的方法步骤
  • 【C++】红黑树

    MarkDown输出x的平方和log以2为底的方法 1 x2 英文输入法 输入x 加 加 2 加 2 log2N 英文输入法 输入log 加 加 2 加 加 N 文章目录 1 红黑树概念 2 红黑树的性质 3 红黑树的实现 3 1 红黑树节
  • Python小项目:葛兰中欧医疗基金数据分析

    文章目录 1 前言 2 数据采集 清洗 2 1 数据采集 2 2 数据清洗 3 净值可视化 4 结语 1 前言 2022年1月末 正值年前 股票市场持续大幅下跌 与之相应的基金市场也出现了近一周的持续跌势 作为一个资深的投资者 我承认自己曾
  • post传参

    HTTP 协议是以 ASCII 码 传输 建立在 TCP IP 协议之上的应用层规范 规范把 HTTP 请求分为三个部分 状态行 请求头 消息主体 协议规定 POST 提交的数据必须放在请求体中 但协议并没有规定数据必须 使用什么编码方式
  • HW OD2022年上半年真题-100分

    需要题目和参考代代码的私信我 1 5键键盘输出 2 IPv4地址转换整数 3 TLV解码 4 VLAN资源池 5 we are a team 6 按单词下标区间翻转文章内容 7 按身高和体重排队 8 报数游戏 9 补种未成活胡杨 10 查找
  • 行为预测的方法,行为分析的基本原理,行为预测算法优缺点,行为预测算法有哪些

    1 行为预测的方法 行为预测的方法包括数据挖掘方法 统计学方法 机器学习方法等 数据挖掘方法是从大数据中挖掘出有价值的信息 包括分类 聚类 关联规则等技术 统计学方法是通过对历史数据进行统计分析 识别出规律性的趋势和模式 对未来进行预测 机
  • C#遍历窗体所有控件或某类型所有控件

    遍历窗体所有控件 foreach Control control in this Controls 遍历后的操作 control Enabled false 遍历某个panel的所有控件 foreach Control control in

随机推荐

  • nginx使用以及配置

    nginx主要使用的地方就是用来进行反向代理的http服务器 主流的Web服务器有 1 Apache 开源免费 具有简单 高速 性能稳定等特点 可作代理服务器使用 2 Nginx 是一种高性能的HTTP和反向代理web服务器 支持高并发和负
  • 微信小程序入门

    系列文章目录 一起来学习小程序吧 文章目录 系列文章目录 一 认识小程序 1 什么是小程序 2 小程序的优势 2 1 用户体验层面 2 2 开发者层面 2 3 运营层面 3 小程序的特点 4 其他小程序 二 小程序的环境准备 1 第一步申请
  • Python新手入门第一步:什么是 IDE?IDE 有什么用?

    前言 写 Python 代码最好的方式莫过于使用集成开发环境 IDE 了 它们不仅能使你的工作更加简单 更具逻辑性 还能够提升编程体验和效率 每个人都知道这一点 而问题在于 如何从众多选项中选择最好的 Python 开发环境 初级开发者往往
  • Unity3D之Animation中AnimationEvent的BUG?爬坑向

    写在前面 账号被盗 博客被封 直到今天才动手找回 没想到还挺顺利 刚好手头上碰到一个坑 记录一下 BUG 1 如图 我在动画的末尾添加了一个AnimationEvent 我希望达到的效果 if 动画拨到最后一帧时 情况一 通知我 这里输出一
  • python中alpha什么意思_如何在Python中设置像素的alpha值

    我正在尝试以某种方式编辑 image 以便将所有白色像素转换为透明像素 具有0 alpha值 基本上我想摆脱背景 我知道图像文件的im putpixel方法 但是根据我的实验 这不允许我设置alpha值 我尝试了以下方法 for x in
  • 计算机BIOS的简单设置

    BIOS是什么 BIOS全称是基本输入输出系统 Basic Input Output System 是由主板厂商固化到主板上的一个特殊的计算机程序 它会在计算机开机的时候会检测硬件 运行自检程序 然后开始查找操作系统并引导到操作系统 所以
  • open3d 点到点云之间的距离

    关键代码 dists pcd compute point cloud distance target chair pcd chair PointCloud import open3d as o3d import numpy as np if
  • Impala的分析函数(基于impala2.12)

    分析函数又称为开窗函数 是一种特殊的内置函数 分析函数不会仅限于对每个group by的分组产生一个结果 它操作的是一个窗口 window 输入的行是排序和分组的 可以通过over 语句使用灵活的条件 impala的分析函数是从impala
  • GIF动态图制作工具(免费),附教程

    GIF动态图制作工具 免费 这里推荐一款动态图制作工具 还可以视频剪辑等等功能非常强大且占内存较小 完全免费非常好用 软件 格式工厂 网上直接搜就行 下载链接在下方 动态图制作教程如下动态图 CSDN发动态图只允许5MB以下所以我选了限制大
  • Python编程之斐波那契数列

    问题描述 完成斐波拉契数列的输出 程序分析 斐波那契数列 Fibonacci sequence 又称黄金分割数列 指的是这样一个数列 0 1 1 2 3 5 8 13 21 34 在数学上 费波那契数列是以递归的方法来定义 F0 0 n 0
  • CloudCompare——采样滤波

    目录 一 随机采样 1 算法原理及代码实现 2 软件实现 3 结果展示 二 空间采样 1 算法原理 2 软件实现 3 结果展示 三 八叉树采样 1 1 算法原理及代码实现 2 软件实现 3 结果展示 四 八叉树采样 2 1 算法原理及代码实
  • 增删改查

    Table structure for user DROP TABLE IF EXISTS user CREATE TABLE user id int 11 NOT NULL AUTO INCREMENT userName varchar
  • PAT_A1134#Vertex Cover

    Source PAT A1134 Vertex Cover 25 分 Description A vertex cover of a graph is a set of vertices such that each edge of the
  • splitVector "errmsg" : "not authorized on test to execute command

    mongodb开启权限之后 splitVector 需要的权限 user test da db test 拥有管理元权限 都不能执行成功 gt db system users find id admin dba user dba db ad
  • flex布局,让2个高度不固定的元素占满屏幕

    例如有这样的一个容器 div class outer div class head div div class content div div outer 的高度是屏幕的高度head 的高度是不确定的 由内容撑高 如何通过纯css使得 co
  • 会议OA项目之我的会议

    目录 一 会议OA名词介绍 二 我的会议SQL语句编写 三 我的会议后台 四 前端 一 会议OA名词介绍 我的会议 当前登录账号 是 某会议 主持人 则查询出来 我的审批 当前登录账号 是 某会议 的指定审批人 并且会议状态是待审核 则查询
  • 视频通信中的码率控制算法

    码率控制技术RC Rate Control 是视频编码中一个非常重要的技术模块 不同的应用场景对视频编码的码率控制有不同的需求 离线编码通常采用可变码率 VBR 实时视频系统通常采用恒定码率 CBR 本篇技术干货将深度剖析视频编码中的码率控
  • Redis Hash查询-单个key存多个对象和多个key存整个对象的差异

    使用的是 NET CORE的StackExchange Redis客户端程序操作redis 以下是个人见解 单个key存多个对象 优点 获取多个数据或全部数据的时候比较方便 操作简单 获取全部 var list await redisCli
  • NetCDF(nc)读写与格式转换介绍

    本文介绍了NetCDF文件格式 并详细讲解了如何使用Python对NetCDF文件进行读写操作 进而介绍了NetCDF文件的地理参考 最后以两个数据为例讲解了怎么将NetCDF格式的数据转GeoTIFF格式的数据 nc文件转为 tif文件
  • 嵌入式Linux--menuconfig详解

    menuconfig 1 简介 menuconfig是一套图像化配置工具 由ncurses库提供软件支持 ncurses库提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面 menuconfig本身的软件只负责提供menuconf