首页 > 系统相关 >Linux – menuconfig讲解

Linux – menuconfig讲解

时间:2024-06-17 21:31:25浏览次数:25  
标签:选项 菜单 Kconfig Linux 配置 讲解 config menuconfig

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。

                        

        ​​​​​​​        ​​​​​​​        

        Q的值根据KBUILD_VERBOSE的值来决定,Q=空时会打印命令信息,Q=@时隐藏命令信息。       

                        

        

        MAKE为系统内置变量,可以参考这篇文章打印

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

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

                        

   obj := $(CURDIR)

   Kconfig := arch/$(SRCARCH)/Kconfig

    SRCARCH := $(ARCH)

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

        ​​​​​​​        

        当我们执行命令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

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

        ​​​​​​​        ​​​​​​​        

3.config

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

4.prompt

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

 

5.depends on、select

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

6.default

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

7.menu

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

8.source

将另外一个Kconfig文件直接复制到当前位置,可以将这个系统贯穿在一起。从开始位置arch/arm/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中的配置值指导整个编译连接过程。

标签:选项,菜单,Kconfig,Linux,配置,讲解,config,menuconfig
From: https://blog.csdn.net/qq_42837317/article/details/139754748

相关文章

  • ARM Linux 设备树详细介绍(2)共二篇
    承接上文,第一篇        3.Device&Tree引发的BSP和驱动变更        有了DeviceTree后,大量的板级信息都不再需要,譬如过去经常在arch/arm/plat-xxx和arch/arm/mach-xxx实施的如下事情:        1.注册platform_device,绑定resource,即内存、......
  • ssh-key-deploy:一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具
    ssh-key-deploy简介使用Python编写的一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具。功能特点创建具有自定义名称和可选密码的SSH密钥。列出本地存储的所有SSH密钥。将SSH密钥安全地上传到远程服务器。使用直观的命令行界面进行操作,支持菜单导航。友好......
  • OpenCloudOS 支持 Linux 原生版微信,开启生态新篇章
    如今,微信已成为办公领域、日常生活以及娱乐方面的刚性需求软件。作为一款通用开源操作系统,OpenCloudOS积极地与微信展开Linux平台的适配工作,全方位地满足广大用户的需求。近期,经过数月的开发与测试,OpenCloudOS社区与微信团队实现了OpenCloudOS与Linux原生版微信的适配支......
  • linux在文件夹中查找文件内容
    linux在文件夹中查找文件内容在Linux中,可以通过以下多个途径,在文件夹中查找文件内容:1、使用grep命令:grep-r"要查找的内容"/path/to/folder-r参数表示递归地在文件夹及其子文件夹中搜索。/path/to/folder是要搜索的文件夹路径。2、使用ack命令ack"要查找的内容......
  • linux清除history
    linux清除history要清除Linux系统中的历史记录(history),可以使用以下几种方法:方法1:通过修改.bash_history文件这是最简单直接的方法,但是只会影响当前用户的历史记录。执行以下命令即可清除:1>~/.bash_history2history-c 方法2:使用export命令同样只会影响当前......
  • linux远程访问及控制
    补充:终端:接收用户的指令TTY终端虚拟终端ssh:22端口号,加密。telnet:23端口号,不加密。解释器:shellSSH远程管理SSH(SecureShell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的......
  • 从Linux内核设计者的角度看 - 设备驱动的架构设计
    Linux中的设备驱动概念中的设备和驱动指的是啥?  直接说设备驱动其实是比较抽象的,举个例子就特别明了了,比如我们要控制1个led的亮灭,那么led就是设备,控制led运行的软件就是该设备的驱动。也就是说,这里的设备就是现实中的一个电子设备,设备驱动就是控制这个电子设备运行的软件程序......
  • Linux 提权-Capabilities
    本文通过Google翻译Capabilities–LinuxPrivilegeEscalation-Juggernaut-Sec这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0前言1什么是Capabilities?2枚举Capabilities2.1枚举Capabilities-手动方法2.1.......
  • LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Pre
    LLM微调方法(Efficient-Tuning)六大主流方法:思路讲解&优缺点对比[P-tuning、Lora、Prefixtuing等]由于LLM参数量都是在亿级以上,少则数十亿,多则数千亿。当我们想在用特定领域的数据微调模型时,如果想要full-tuning所有模型参数,看着是不太实际,一来需要相当多的硬件设备(GPU),二来需要......
  • Linux上java-jar Spingboot项目
    百度的,后面再补一个Linux文档操作手册,是不是很大胆?准备工作1、首先得有两个软件Xftp(用来上传文件到)和XShell(连接服务器执行命令)2、Linux上有JDK(怎么安装可以转到Linux安装JDK流程)3、项目的JAR包项目jar包导jar<build><plugins><plugin><groupId......