Linux内核配置机制与编译过程分析

时间:2021-10-16 07:46:47

1. 内核配置系统的基本结构

内核配置系统由以下三个部分组成:

(1)Makefile:分布在内核源代码根目录及各层目录中,定义了内核编译的规则;

(2)配置文件:一般在/kernel/arch/$ARCH/configs中,/kernel/arch目录下的每个架构都有对应的默认配置文件;

(3)配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解析)、配置用户界面(字符界面、Ncurses图形界面、Xwindows图形界面,各自对应make config、make menuconfig、make xconfig)

2. 内核配置与编译的步骤

(1)make distclean :清除临时文件、中间文件和配置文件;

(2)make xxx_config(默认配置文件):得到内核的当前配置文件.config;

(3)make menuconfig(或config、xconfig):进入配置用户界面,进行内核的详细配置;

(4)make all:编译内核。

注意:使用make命令时,先确认Makefile文件中的编译工具链是否定义正确。

CROSS_COMPILE?= /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

make xxx_config,即make x210ii_qt_defconfig,其作用是将/kernel/arch/$ARCH/configs目录下的默认配置文件x210ii_qt_defconfig拷贝至内核根目录下,并重新命名为.config,即.config文件为内核的当前配置文件。

2.1 make xxx_config(配置文件名)解析

不同架构下的配置文件不同,有$ARCH变量指定架构,从而读取相应的配置文件。$ARCH在Makefile中指定。

ARCH?=  arm

make menuconfig,生成一个内核配置的界面。menuconfig涉及到一下几个文件:

2.2 make menuconfig(或config、xconfig)解析

(1)内核源码根目录下的scripts文件夹

menuconfig文字式图形界面是由ncurses库、/kernel/scripts目录下面的脚本文件支持生成的。

(2)/arch/$ARCH/Kconfig,各层目录下的Kconfig文件

menuconfig图形界面中的所有表项都来自Kconfig文件。

(3)内核源码根目录下的.config文件、/kernel/include/generated/autoconfig.h文件

menuconfig图形界面中所有表项的设置值都从.config文件中读取。menuconfig界面中的修改部分会同步至.config文件中;同时还会将所有的配置选项以宏的形式保存在/kernel/include/generated/autoconfig.h中,内核源码会根据其中的宏进行条件编译。

 

.................................................................................................

#define CONFIG_SND_S5PV2XX_SOC_WM8976 1

#define CONFIG_IP_NF_TARGET_REDIRECT 1
#define CONFIG_CRC32 1
#define CONFIG_I2C_BOARDINFO 1
#define CONFIG_NF_NAT_PROTO_SCTP 1
#define CONFIG_HAVE_AOUT 1

 

根据配置过程中生成的/kernel/include/generated/autoconfig.h文件,内核源码会根据其中的宏进行条件编译。(4)内核根目录下、各层子目录下的Makefile文件

 

....................................................................................................

obj-$(CONFIG_IDE)+= ide/
obj-$(CONFIG_SCSI)+= scsi/
obj-$(CONFIG_ATA)+= ata/
obj-$(CONFIG_MTD)+= mtd/
obj-$(CONFIG_SPI)+= spi/
obj-y+= net/
obj-$(CONFIG_ATM)+= atm/
obj-$(CONFIG_FUSION)+= message/

obj-$(CONFIG_FIREWIRE)+= firewire/

.....................................................................................................

 

menuconfig图形界面用来配置内核选项。

3. menuconfig图形界面的使用方法

(1)上下方向键,浏览菜单目录;

(2)enter键,执行选中项;

(3)esc键,返回至上一页面;

(4)/键,搜索表项;

(5)?键,显示帮助信息;

(5)Y、N、M代表表项的三种配置情况。

  Y:将选中的表项编入内核;

  N:将选中的表项从内核去除;

  M:将选中的表项模块化,即将这个表项编译为一个单独的内核模块.ko文件,不链接入内核,Linux启动会可动态加载或卸载该模块。

[ ]表项不能实现模块化,< >表项可以实现模块化。表项前的括号里,*表示编入,空白表示去除,M表示模块化。