2.15.6.menuconfig的工作原理

本节讲解menuconfig的工作原理,主要揭示了menuconfig和.config、Kconfig文件的关联。

2.15.6.1、menuconfig本身由一套软件支持

(1)linux为了实现图形化界面的配置,专门提供了一套配置工具menuconfig。
(2)ncurses库是linux中用来实现文字式的图形界面,linux内核中使用了ncurses库来提供menuconfig
(3)scriptskconfiglxdialog目录下的一些c文件就是用来提供menuconfig的那些程序源代码。

2.15.6.2、menuconfig读取Kconfig文件

(1)menuconfig本身的软件只负责提供menuconfig工作的这一套逻辑(譬如在menuconfig中通过上下左右箭头按键来调整光标,Enter ESC键等按键按下的响应),而并不负责提供内容(菜单里的项目)。
(2)menuconfig显示的菜单内容(一方面是菜单的目录结构,另一方面是每一个菜单项目的细节)是由内核源码树各个目录下的Kconfig文件来支持的。Kconfig文件中按照一定的格式包含了一个又一个的配置项,每一个配置项在make menuconfig中都会成为一个菜单项目。而且menuconfig中显示的菜单目录结构和源码目录中的Kconfig的目录结构是一样的。
(3)在相应的Kconfig文件中删除一个config项,则再次make menuconfig时这个项目已经看不到了。

2.15.6.3、menuconfig读取/写入.config文件

(1)刚才已经知道menuconfig的菜单内容来自于Kconfig文件,但是每一个菜单的选择结果(Y、N、M)却不是保存在Kconfig文件中的。Kconfig文件是不变的,Kconfig文件只是决定有没有这个菜单项,并不管这个菜单项的选择结果。
(2)menuconfig工作时在我们make menuconfig打开时,他会读取.config文件,并且用.config文件中的配置选择结果来初始化menuconfig中各个菜单项的选择值。

总结:菜单项的项目内容从Kconfig文件来,菜单项的选择值从.config文件来

(3)当我们每次退出make menuconfig时,menuconfig机制会首先检查我们有没有更改某些配置项的值,如果我们本次没有更改过任意一个配置项目的值那直接退出;如果我们有改动配置项的值则会提示我们是否保存。此时如果点保存,则会将我们更改过的配置重新写入.config文件中记录,下一次再次打开make menuconfig时会再次加载.config,最终去编译内核时编译连接程序会考虑.config中的配置值指导整个编译连接过程。

总结:本节课主要内容就是讲:menuconfig和Kconfig和.config的关系。

linux内核大部分目录下都有一个Kconfig文件,menuconfig通过读取Kconfig文件来形成一个图形菜单。
linux内核下有一个Kconfig文件夹,里面有一些C文件用来提供menuconfig支持。

我的理解:linux通过内核源码树[目录层次]来管理代码,[相当于一个树形结构],Kconfig相当于一个算法,遍历这个树形结构,把这些目录之间的关系建立起来;menuconfig通过读取Kconfig文件夹形成一个图形菜单选项,然后我们可以决定哪个目录要不要编译,并且将选项结果写入.config文件;内核会读取.config文件里面的内容通过设置Makefile指导整个编译链接过程

原文地址:https://www.cnblogs.com/Ocean-Star/p/9229654.html