linux内核配置原理

原文地址::内核配置原理_内核deconfig 文件_Engineer-Jaylen_Sun的博客-CSDN博客

1. 相关配置文件的作用
在进行 linux 内核的配置编译的时候,最常见的就是 make menuconfig 命令。总所周知,linux是一个模块化定制的系统,那么它又是如何来实现模块化的配置的呢?

在配置的过程中,我们最重要的就是理清楚 kconfig、.config 、 menuconfig之间的关系。

在Linux内核中,添加驱动代码一般有3部:

将代码拷贝到Linux内核代码恰当的地方

新建或者修改对应的kconfig文件

新建或修改对应的makefile文件

Kconfig ---> (每个源码目录下)提供编译选项
.config ---> (源码顶层目录下)保存选择结果
Makefile---> (每个源码目录下)根据.config中的内容来告知编译系统如何编译
1
2
3
1.1 deconfig 文件
一般由平台厂商提供,内核编译用做 .config 的参考,注意:如果,缺少该文件,无法进行编译。

文件位于:\kernel..\arch\arm\configs\xxx_defconfig

1.2 .config 文件
默认情况下是没有 .config 文件的,配置过程就是为了产生 .config 文件。内核在编译过程中会读取 .config 中的配置项,并且用这些配置项去指导整个编译链接过程。.config 文件的格式类似于脚本文件,其中内容为类似于:CONFIG_ARM=y 的一个一个的配置项。这些配置项就类似于脚本文件中定义的一个一个变量,所以这一行可以被理解为定义了一个变量 CONFIG_ARM,这个变量的值为 y。.config文件中每一行都是一个配置项,从 .config 文件的规模可以看出linux内核的可配置项有两三千个。所以linux内核是高度可配置的,而且linux内核的所有配置项很难全部搞明白。因为linux内核的配置项太多太繁杂,因此linux内核不像uboot那样直接手工配置,而是发明了一个图形化的配置工具 menuconfig。

.config 文件是一个隐藏文件,要用 “ls -a” 才能看见,默认是没有这个文件的,需要执行配置命令(make xxxx_defconfig)后才会生成。.config文件最初就是由xxxx_defconfig文件复制得来,里面全是配置项,以行为单位。每个配置项的格式都是CONFIG_xxx=x,每个配置项都可以在menuconfig中找到。CONFIG_xxx是配置项的名字,该配置项在menuconfig中的名字就是xxx,等号后面是配置的结果,可以是Y、N、M,Y代表编译连接此模块,N代表不编译此模块,M代表将该模块单独编译成.ko文件。

总结:.config文件最初由xxxx_defconfig文件复制得来,然后可以在menuconfig中做修改,最终Makefile会读取.config文件,里面的每个配置项都会指导内核的编译。

1.2 kconfig
kconfig 是一种特定格式的脚本文件,分布在各目录下的 Kconfig 构成了一个分布式的内核配置数据库,每个 Kconfig 分别描述了所属目录源文件相关的内核配置菜单。在内核配置make menuconfig(或xconfig等) 时,从 Kconfig 中读出配置菜单,用户配置完后保存到 .config (在顶层目录下生成)中,供 Makefile 文件在编译内核时使用。

kconfig脚本的格式如下图所示:

1.3 makefile
分布在各个目录下,用于集成编译。

defconfig、 .config 、kconfig 与makefile的用途与关系

defconfig、 .config 、kconfig 与makefile和make menuconfig流程

2. 内核中修改和保存defconfig的方法
从.config到defcong不是简单的复制操作,而是make arch=arm64 defcong

通过menuconfig生成的.confg也不是直接拷贝成defcong,而是使用make savedefconfig,具体步骤如下:

要修改在 arch/arm/configs 下的文件 xxx_defconfig
make xxx_defconfig 会生成 .config 文件。
make menuconfig 修改配置后保存。
make savedefconfig 生成 defconfig 文件。
cp defconfig arch/arm/configs/xxx_defconfig 保存这样保存的 defconfig 文件,配置最小化。
make xxx_defconfig生成的.config可以直接make zImage
相当于cp arch/arm/configs/xxx_defconfig .config 再执行make menuconfig的效果。

make menuconfig 后会加入通用未使能的配置项,去除配置项执行 make savedefconfig命令
1
2
3
4
正确地保存编译内核产生的.config文件-使用make savedefconfig

3. 常用配置命令解释
config 使用基于行的程序更新当前配置
nconfig 使用ncurses基于菜单的程序更新当前配置
menuconfig 使用基于菜单的程序更新当前配置
xconfig 使用基于Qt的前端更新当前配置
gconfig 使用基于GTK +的前端更新当前配置
oldconfig 使用提供的.config作为基础更新当前配置
localmodconfig 更新当前配置禁用未加载的模块
localyesconfig 更新当前配置,将本地mod转换到内核
defconfig 默认来自Arch提供的defconfig的新配置
savedefconfig 将当前配置保存为./defconfig(最小配置)
allnoconfig 新配置,其中所有选项均以“否”回答
allyesconfig 新配置,其中所有选项都被'yes'接受
allmodconfig 尽可能新配置选择模块
alldefconfig 新配置,所有符号都设置为默认值
randconfig 新配置,随机回答所有选项
listnewconfig 列出新选项
olddefconfig 与oldconfig相同,但在没有提示的情况下将新符号设置为其默认值
kvmconfig 为KVM虚拟机内核支持启用其他选项
xenconfig 为xen dom0和虚拟机内核支持启用其他选项
tinyconfig 配置最小的内核

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
make config
基于命令行的,文本式的,交互式的,对话式的,配置。—不太方便使用。

make menuconfig
基于菜单式的,属于带图形界面的,或者叫辅助图形界面,基于ncurses库。—方便使用

make xconfig
真正的,图形界面的配置,用到的是QT的库。但是个人觉得界面效果也不是很好。
加上由于用到额外的图形库,所以用起来也不是那么的广泛。

make gconfig
也是图形界面。用到的是GTK的库。

make defconfig
调用默认的配置。
其和上面三个:make config,make menuconfig,make xconfig,不是一伙的。
其不是另外一种配置的方式。而是(直接去)使用某个默认的配置,即和配置内容相关。和使用何种配置方式(命令行,还是图形界面等等)无关。

make oldconfig
其使用old,旧的配置。

目的在于:尽量使用之前的配置(去用都当前的,新的,后者是别的内核或某软件的配置),以达到节省时间的目的。
————————————————
版权声明:本文为CSDN博主「Engineer-Jaylen_Sun」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40209493/article/details/128178510

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值