A、配置工具的使用方式 make config(基于文本的最为传统的配置界面,不推荐使用) make menuconfig (基于文本菜单的配置界面,需要安装ncurse) make xconfig (基于QT的图形配置界面,要求QT被安装) make gconfig (基于GTK+的图形配置界面,要求GTK+被安装) make oldconfig (以现有的.config文件为基础来更新当前配置) make silentoldconfig (与oldconfig相同,但不输出任何信息) make randconfig (创建新的配置文件,其中包括所有配置选项的随机答案) make defconfig (创建新的配置文件,其中包括所有配置选项的默认答案) make allmodconfig (创建新的配置文件,尽可能地将选项配置成默认模块) make allyesconfig (创建新的配置文件,将所有选项配置成yes) make allnoconfig (创建新的配置文件,将所有选项配置成no,即最小化的配置) 以上make xxconfig使用方式中make menuconfig最为常用,使用说明如下: make menuconfig: scripts文件夹存放的是跟make menuconfig配置界面的图形绘制相关的文件,执行make menuconfig命令出时: HOSTCC scripts/kconfig/lxdialog/checklist.o HOSTCC scripts/kconfig/lxdialog/inputbox.o HOSTCC scripts/kconfig/lxdialog/menubox.o HOSTCC scripts/kconfig/lxdialog/textbox.o HOSTCC scripts/kconfig/lxdialog/util.o HOSTCC scripts/kconfig/lxdialog/yesno.o HOSTCC scripts/kconfig/mconf.o HOSTLD scripts/kconfig/mconf scripts/kconfig/mconf arch/arm/Kconfig mconf表示是menuconfig的解析程序,mconf解析处理arch/arm/Kconfig文件,最终mconf会把用户的选择保存到Linux源码树顶层目录的.config文件中。 xxconfig文件实际是开发板厂商移植的kernel的推荐配置,实际开发中可以根据开发板厂商提供的kernel的xxconfig结合产品需求进行剪裁配置,得到需要的kernel配置,即通过make menuconfig进行配置裁剪。archarmKconfig用于生成整个配置界面选项(Kconfig是整个linux配置机制的核心),是配置界面的主菜单界面,经过设置、修改的选项的选择结果保存在根目录下的.config文件中。退出时,menuconfig会检查是否修改了配置选项,如果修改了配置选项会提示保存,否则会直接退出。保存时会将修改过的配置选项写入.config文件中。 B、Kconfig文件配置项的格式menu/endmenu:可以将一部分配置选项分类为一个目录menu,menu与endmenu是一组指令,必须同时使用。menu和endmenu中包含的部分就是子目录中的配置项。menuconfig:menuconfig是可以配置的目录menu,即可以修改menu选中或排除config:config是构建Kconfig的基本单元,config的类型有5种,分别是bool(y/n),tristate(y/m/n),string(字符串),hex(十六进 制),integer(整数)。tristate三种选项配置bool两种选项配置depends on/requires依赖于的配置项,如果依赖的配置选项没有选中,则当前选项也无法选中---help---help信息select反向依赖配置选项,如果当前选项选中,则也会自动选中select后的选项。default选项默认值,可以有多个,但只有第一个定义的值有效range:范围,用于hex和integer,range A B表示当前值不小于A,不大于Bcomment:注释choice/endchoice:多选一source:将子目录的Kconfig引入到当前位置 C、Kconfig文件添加功能选项实例 menuconfig: menuconfig NETDEVICES default y if UML depends on NET bool "Network device support" ---help--- You can say N here if you don't intend to connect your Linux box to any other computer at all. menuconfig NETDEVICES表明菜单目录是可以修改配置的,并且菜单录有子目录,菜单选项在.config文件的选项为CONFIG_NETDEVICES,bool "Network device support"表明菜单目录的提示符是"Network device support"。depends on NET表名菜单目录依赖于NET选项。 菜单目录的子目录选项需要放在以下定义的范围内:if NETDEVICES......子目录菜单选项endif # NETDEVICESmenu:if WIMAXmenu "WiMAX Wireless Broadband devices"source "drivers/net/wimax/i2400m/Kconfig"endmenuendif menu "WiMAX Wireless Broadband devices”表明菜单目录不具备修改属性,但具有子目录菜单,菜单提示符为"WiMAX Wireless Broadband devices”。子菜单的Kconfig来源source "drivers/net/wimax/i2400m/Kconfig"。if WIMAX表明菜单依赖于WIMAX选项。 D、make menuconfig使用按Enter键进入子目录按Y键选中当前选项按N键排除当前选项按M键将当前模块进行模块化编译按ESC ESC将退出当前选项返回上一层目录按?将显示当前选项的help信息方向箭头可以将光标向上下左右移动[*]:选中[ ]:排除< >:可以模块化编译:模块化编译make menuconfig对目录树下Kconfig文件选项配置后选项的结果保存在.config文件中,文件内容如下:CONFIG_ARM=yCONFIG_HAVE_PWM=yCONFIG_SYS_SUPPORTS_APM_EMULATION=yCONFIG_GENERIC_GPIO=yCONFIG_GENERIC_TIME=yCONFIG_ARCH_USES_GETTIMEOFFSET=y.config文件中的选项的值将与目录树下Makefile文件结合,确保配置选中的功能模块选项会被编译,未被选中的不会被编译,以及功能模块是被编译进内核还是编译成模块.ko文件。 三、配置项添加实例给内核增加一个功能,并且通过make menuconfig控制其生成过程,流程如下:A、修改对应目录下的Kconfig文件,按照Kconfig语法增加对应的选项;B、执行make menuconfig选择编译进内核或者不编译进内核,或者编译为模块,.config文件和autoconf.h文件会自动生成C、修改对应目录下的Makefile文件完成编译选项的添加D、编译内核make -j4在drivers
et目录下添加TFTP的功能模块,流程如下:1、修改drivers
et目录下的Kconfig文件,在网络设备支持代码块NETDEVICES内部添加TFTP的配置选项:config TFTPtristate "TFTP support"depends on NET_CLS_ACT---help--- This is an TFTP.2、执行make menuconfig,将TFTP功能编译为模块 查看.config文件可知,CONFIG_TFTP定义在网络设备支持选项CONFIG_NETDEVICES后,以模块编译。CONFIG_NETDEVICES=yCONFIG_TFTP=m3、修改drivers
et目录下Makefile文件添加编译目标obj-$(CONFIG_TFTP) +=tftp.o4、编译kernelmake -j4