Linux 2.6 内核的配置系统由以下3 个部分组成。
l Makefile:分布在Linux 内核源代码中的Makefile,定义Linux 内核的编
译规则。
l 配置文件(Kconfig):给用户提供配置选择的功能。
l 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和
配置用户界面(提供字符界面和图形界面)。这些配置工具都是使用脚本语言编
写的,如Tcl/TK、Perl等。
使用make config、make menuconfig等命令后,会生成一个.config配置文件(隐
含在顶层Makefile中),记录哪些部分被编译入内核、哪些部分被编译为内核模块。
运行make menuconfig时,配置工具首先分析与体系结构对应的/arch/xxx/Kconfig
文件(xxx 即为传入的ARCH 参数),/arch/xxx/Kconfig文件中除本身包含一些与体系
结构相关的配置项和配置菜单以外,还通过source语句引入了一系列Kconfig文件,
而这些Kconfig 文件又可能再次通过source 引入下一层的Kconfig,配置工具依据这
些Kconfig 包含的菜单和项目即可描绘出一个如图3.6 所示的分层结构。例如,
make ARCH=arm CROSS_COMPILE=arm-linux- smdk2410_defconfig(指定体系结
构为ARM,交叉编译器为arm-linux-gcc,采用smdk_2410defconfig配置)
/arch/arm/Kconfig文件的结构如下:
mainmenu "Linux Kernel Configuration"
config ARM
bool
default y
help
The ARM series is a line of low-power-consumption RISC chip
designs
licensed by ARM Ltd and targeted at embedded applications and
handhelds such as the Compaq IPAQ. ARM-based PCs are no longer
manufactured, but legacy ARM-based PC hardware remains popular
in
Europe. There is an ARM Linux project with a web page at
<http://www.arm.linux.org.uk/>.
config MMU
bool
default y
...
config ARCH_S3C2410
bool "Samsung S3C2410"
help
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ
1940 or
the Samsung SMDK2410 development board (and derivatives).
...
source "mm/Kconfig"
...
source "net/Kconfig"
...
source "arch/arm/mach-s3c2410/Kconfig"
...
用户运行make zImage、make bzImage等生成映像的命令时,先检索顶层Makefile
(在arch/xxx 目录下的Makefile 为顶层Makefile 补充体系结构相关的信息),顶层
Makefile完成两个主要的任务:产生内核映像文件和内核模块。为了达到此目的,顶
层Makefile会递归地进入内核的各个子目录中,分别调用位于这些子目录中Makefile
(子目录中的Makefile属于kbuild类型的Makefile,记录编译目标)。进入哪些子目录
则取决于内核的配置,这也就是make config和make menuconfig等生成的.config文件
发挥作用的地方。
Kconfig和Makefile
在Linux 内核中增加程序需要完成以下3项工作。
l 将编写的源代码复制到Linux 内核源代码的相应目录。
l 在目录的Kconfig文件中增加新源代码对应项目的编译配置选项。
l 在目录的 Makefile文件中增加对新源代码的编译条目。