内核的配置编译过程:
进入root用户下操作(以防没有权限):
- 使用移植好的内核,解压
- 执行make distclean 清理
- 打开主makefile文件,确认CROSS_CONPILE路径和自己安装的交叉编译工具一致
CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
确认架构一致
ARCH = arm
- 执行make xx_defconfig 生成.config配置文件
这里使用的是x210ii_qt_defconfig(在arch/arm/configs目录下找一个和自己开发板最接近的)
configuration written to .config
见到这个就成功了
- 执行make menuconfig进入界面进行配置(需要先安装ncurses库,执行apt-get install libncurses5-dev安装即可)
- 配置完成后执行make,生成/arch/arm/boot/zImage镜像文件
内核的配置原理:
由于内核十分庞大,配置过程复杂,所以分成两步,
第一步:make xxx_defconfig解决的问题是大部分的配置项(这一步结束后大部分配置项就已经正确了)
第二步:对个别不同的针对我们的开发板进行细节调整,细节调整就通过make menuconfig来完成
.config文件:
- 配置的关键是得到.config文件,这是个隐藏文件,需要ls -a查看
- .config文件是linux内核在编译过程中很重要的一个文件,其作用类似与uboot中的include/configs/x210_sd.h,内核在编译过程中会读取.config中的配置项,并且用这些配置项去指导整个编译链接过程
- make x210ii_qt_defconfig生成.config实际上就是
将x210ii_qt_defconfig文件复制为.config
cp arch/arm/configs/x210ii_qt_defconfig .config
- arch/arm/configs目录下的这么多个xxx_defconfig都是别人手工配置好适合一定的开发板的.config文件后自己把.config文件保存过去的。我们要做的是挑选最接近自己使用的开发板的那个文件。
menuconfig:
make menuconfig其实就是读取第一步得到的.config,然后给我们一个图形化的界面,让我们可以更加容易的找到自己想要修改的配置项,然后更改配置
使用说明:
-
键盘按键Y、N、M三个按键的作用分别是将选中模块编入、去除、模块化
-
*表示编入,空白表示去除,M表示模块化
-
/直接查找文件
-
? 帮助信息
-
[ ]表示支持 Y/N
-
<>表示支持 Y/N/M

menuconfig的工作原理: -
menuconfig本身由一套软件支持
-
menuconfig读取Kconfig文件,menuconfig本身只提供框架,其中的配置项来自kconfig,内核源码树各个目录下都有Kconfig文件
-
但是在menuconfig更改后结果保存在.config中
总结:menuconfig菜单项的项目内容从Kconfig文件来,菜单项的选择值从.config文件来,更改后也保存在.config中
kconfig文件详解:
将来在做驱动移植等工作时,有时需要自己添加Kconfig中的一个配置项来将某个设备驱动添加到内核的配置项目中,这时候就需要对Kconfig的配置项格式有所了解
下面是kconfig文件的基本格式:
menuconfig NETDEVICES
default y if UML
depends on NET
bool "Network device support"
---help---
......
config IFB
tristate "Intermediate Functional Block support"
depends on NET_CLS_ACT
---help---
......
source "drivers/net/arcnet/Kconfig"
- menuconfig表示菜单(本身属于一个菜单中的项目,但是他又有子菜单项目)、config表示菜单中的一个配置项(本身并没有子菜单下的项目)
- menuconfig或者config后面的大写字母就是配置项名字,比如NETDEVICES这个字符串前面添加CONFIG_后就构成了.config中的配置项CONFIG_NETDEVICES名字。
- 一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。这就是Kconfig中表示的目录关系
- 内核源码目录树中每一个Kconfig都会source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中
- tristate意思是三态(对应 <>),bool是两态(对应 [ ])
- depends:表示本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义。支持逻辑操作
Kconfig和.config文件和Makefile三者的关联:
- 配置项被配置成Y、N、M会影响.config文件中的CONFIG_XXX变量的配置值
- .config中的配置值(=y、=m、=n)会通过makefile影响最终的编译链接过程
本文详细介绍了Linux内核配置的编译过程,包括成为root用户、执行make distclean、make xxx_defconfig、make menuconfig以及make。同时解析了内核配置的原理,解释了.config文件的重要性,以及menuconfig的使用方法和工作原理。通过对Kconfig文件的分析,揭示了配置项如何影响编译链接过程。
1085

被折叠的 条评论
为什么被折叠?



