linux内核的配置与编译过程
选择九鼎s5pv210开发板移植的Linux内核,下载地址为:
链接:http://pan.baidu.com/s/1sl15QMD 密码:by3o
1.首先检查Makefile
查看Makefile主要看一下Makefile中的两个变量:ARCH与CROSS_COMPILE;
(1)主要是检查交叉编译工具链有没有设置对。
CROSS_COMPILE ?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
(2)确认ARCH = arm。主要目的是为了编译时能找到arch/arm目录。
2.配置过程
(1)配置主要通过两步进行:
第一步,make xx_defconfig,在九鼎x210开发板中是make x210ii_qt_defconfig,如果在配置信息最后一行看到configuration written to .config这句,表明把所有的配置选项都写到.config文件中。
第二步,make menuconfig,在这个图形界面进行配置。
(2)make xx_defconfig和make menuconfig相配合
make xxx_defconfig这一步其实是参考别人已经做好的,这样做有很多好处:减少很多工作量,避开了很多自己不懂的配置项(譬如对内存管理的、调度系统的等模块的配置项),我们只用管自己需要管的。
其实make x210ii_qt_defconfig就相当于:cp arch/arm/configs/x210ii_qt_defconfig .config
在arch/arm/configs目录下有很多xxx_defconfig,这些文件都是别人手工配置好适合一定的开发板的.config文件后自己把.config文件保存过去的
make menuconfig其实就是读取第一步得到的.config,然后给我们一个图形化的界面,让我们可以更加容易的找到自己想要修改的配置项,然后更改配置。
(3)make menuconfig注意事项
执行之后的图形界面如图所示:
1.用法:
箭头按键导航整个菜单;
回车按键选择子菜单(注意选项后面有 —>的选项才是有子菜单的,没有这个标识的没有子菜单);
高亮的字母是热键(快捷键);
键盘按键Y、N、M三个按键的作用分别是将选中模块编入、去除、模块化,在menuconfig中选项前面的括号里,*表示编入,空白表示去除,M表示模块化;
双击ESC表示退出;
按下”?“按键可以显示帮助信息;
按下”/“按键可以输入搜索内容来全局搜索信息(类似于vi中的搜索);
[]不可以模块化,<>的才可以模块化。
2.menuconfig的工作原理
a. menuconfig显示的菜单内容是由内核源码树各个目录下的Kconfig文件来支持的。Kconfig文件中按照一定的格式包含了一个又一个的配置项,每一个配置项在make menuconfig中都会成为一个菜单项目。而且menuconfig中显示的菜单目录结构和源码目录中的Kconfig的目录结构是一样的。在相应的Kconfig文件中删除一个config项,则再次make menuconfig时这个项目已经看不到了。
b. menuconfig读取/写入.config文件
menuconfig的菜单内容来自于Kconfig文件,但是每一个菜单的选择结果(Y、N、M)却不是保存在Kconfig文件中的。Kconfig文件是不变的,Kconfig文件只是决定有没有这个菜单项,并不管这个菜单项的选择结果。menuconfig工作时在我们make menuconfig打开时,他会读取.config文件,并且用.config文件中的配置选择结果来初始化menuconfig中各个菜单项的选择值。
总结:菜单项的项目内容从Kconfig文件来,菜单项的选择值从.config文件来。
3.Kconfig文件分析
几乎在大部分的目录下都有一个Kconfig文件,随便找一个Kconfig文件进行分析,比如\kernel\drivers\net\wireless目录下的Kconfig文件,内容如下:
menuconfig WLAN
bool "Wireless LAN"
depends on !S390
depends on NET
select WIRELESS
default y
---help---
This section contains all the pre 802.11 and 802.11 wir