在进行 linux 内核的配置编译的时候,最常见的就是 make menuconfig 命令。总所周知,linux是一个模块化定制的系统,那么它又是如何来实现模块化的配置的呢?
成都创新互联 - 成都二枢机房,四川服务器租用,成都服务器租用,四川网通托管,绵阳服务器托管,德阳服务器托管,遂宁服务器托管,绵阳服务器托管,四川云主机,成都云主机,西南云主机,成都二枢机房,西南服务器托管,四川/成都大带宽,服务器机柜,四川老牌IDC服务商在配置的过程中,我们最重要的就是理清楚 kconfig、.config 、 menuconfig之间的关系。
在Linux内核中,添加驱动代码一般有3部:
将代码拷贝到Linux内核代码恰当的地方
新建或者修改对应的kconfig文件
新建或修改对应的makefile文件
Kconfig --->(每个源码目录下)提供编译选项
.config --->(源码顶层目录下)保存选择结果
Makefile--->(每个源码目录下)根据.config中的内容来告知编译系统如何编译
1.1 deconfig 文件一般由平台厂商提供,内核编译用做.config
的参考,注意:如果,缺少该文件,无法进行编译。
文件位于:\kernel..\arch\arm\configs\xxx_defconfig
默认情况下是没有.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 kconfigkconfig
是一种特定格式的脚本文件,分布在各目录下的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命令
正确地保存编译内核产生的.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 配置最小的内核
make config
基于命令行的,文本式的,交互式的,对话式的,配置。—不太方便使用。
make menuconfig
基于菜单式的,属于带图形界面的,或者叫辅助图形界面,基于ncurses库。—方便使用
make xconfig
真正的,图形界面的配置,用到的是QT的库。但是个人觉得界面效果也不是很好。
加上由于用到额外的图形库,所以用起来也不是那么的广泛。
make gconfig
也是图形界面。用到的是GTK的库。
make defconfig
调用默认的配置。
其和上面三个:make config,make menuconfig,make xconfig,不是一伙的。
其不是另外一种配置的方式。而是(直接去)使用某个默认的配置,即和配置内容相关。和使用何种配置方式(命令行,还是图形界面等等)无关。
make oldconfig
其使用old,旧的配置。
目的在于:尽量使用之前的配置(去用都当前的,新的,后者是别的内核或某软件的配置),以达到节省时间的目的。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
网页题目:内核配置原理-创新互联
网站路径:http://lswzjz.com/article/geeii.html