(注:本文参考资料:朱有鹏嵌入式课程。本文为我的学习记录,若有错误,欢迎指正。内核版本:九鼎公司移植的2.6.35.7)linux
内核配置系统由如下三个部分组成:windows
(1)Makefile:分布在内核源代码根目录及各层目录中,定义了内核编译的规则;架构
(2)配置文件:通常在/kernel/arch/$ARCH/configs中,/kernel/arch目录下的每一个架构都有对应的默认配置文件;ide
(3)配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解析)、配置用户界面(字符界面、Ncurses图形界面、Xwindows图形界面,各自对应make config、make menuconfig、make xconfig)模块化
(1)make distclean :清除临时文件、中间文件和配置文件;工具
(2)make xxx_config(默认配置文件):获得内核的当前配置文件.config;学习
(3)make menuconfig(或config、xconfig):进入配置用户界面,进行内核的详细配置;spa
(4)make all:编译内核。ip
注意:使用make命令时,先确认Makefile文件中的编译工具链是否认义正确。ci
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文件为内核的当前配置文件。
不一样架构下的配置文件不一样,有$ARCH变量指定架构,从而读取相应的配置文件。$ARCH在Makefile中指定。
ARCH?= arm |
make menuconfig,生成一个内核配置的界面。menuconfig涉及到一下几个文件:
(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 ................................................................................................. |
(4)内核根目录下、各层子目录下的Makefile文件
根据配置过程当中生成的/kernel/include/generated/autoconfig.h文件,内核源码会根据其中的宏进行条件编译。
.................................................................................................... obj-$(CONFIG_IDE)+= ide/ obj-$(CONFIG_FIREWIRE)+= firewire/ ....................................................................................................... |
menuconfig图形界面用来配置内核选项。
(1)上下方向键,浏览菜单目录;
(2)enter键,执行选中项;
(3)esc键,返回至上一页面;
(4)/键,搜索表项;
(5)?键,显示帮助信息;
(5)Y、N、M表明表项的三种配置状况。
Y:将选中的表项编入内核;
N:将选中的表项从内核去除;
M:将选中的表项模块化,即将这个表项编译为一个单独的内核模块.ko文件,不连接入内核,Linux启动会可动态加载或卸载该模块。
[ ]表项不能实现模块化,< >表项能够实现模块化。表项前的括号里,*表示编入,空白表示去除,M表示模块化。