内核编译

来源:互联网 发布:青之峰网络 编辑:程序博客网 时间:2024/04/29 09:31

编译选项文件Kconfig语法结构:
config:主要指定目录项目(配置一个目录),并定义符号值. config 变量

menuconfig:其定义的符号用于控制从属的config命令,其包含的config可以使用多个.

choice和endchoice:它们中包含的多个config命令中只能选择一个时使用.

comment:从菜单中输出支付串的功能. Comment”--------”

menu和endmenu:表示子菜单,即把menu和endmenu命令之间的目录项分辨为下一层目录.
menu”-----” -------------------------------------------------- endmenu
注意:mainmenu只有一个,即最开始的声明为内核配置菜单.”Linux Kernel Configuration”,其不需要结束命令.

if和endif:当为真时即执行条件语句块.

Source:即包含其他内核编译选项文件,即执行其他目录中的编译选项文件.

Config命令的选项:
定义类型:即该选项赋予config指定的符号值相关特性,即输入变量类型.
bool <输入字符串> 输入变量为布尔变量(yes 或no)
tristate<输入字符串> 输入变量为一个3态变量(一般为编译状态build-in ,modules,no)
string<输入字符串> 输入变量为一个字符串
int<输入字符串> 输入变量为整数
hex<输入字符串> 输入变量为16进制,即以0x开头

prompt<输入字符串> if<表达式>
为使menu中的config所指定的符号获取值,指定输出字符串

default<表达式> if<表达式>
用户没有选择时指定基本的命令,可以使用if语句指定多个基本值。

依赖性
depends on <表达式> if<表达式>
requires<表达式> if<表达式>
注意以下例子:
bool “foo” if BAR
defult y if BAR -------即if相当于依赖条件
与下面例子意义相同
depends on BAR bool “foo” defult y

逆向依赖:
select<符号> if<表达式>
为其他符号再次赋予依赖性,表示强行指定为其他符号的依赖命令.

range<范围> if<表达式>
为符号设置范围

help帮助文档
最底层Kconfig存放在/arch/i386(或者是arm)/Kconfig. 以此为头,它会一层层使用source来把需要加入的各个目录中Kconfig添加近来。
例如:source "drivers/Kconfig"则将~/drivers/Kconfig添加进Menu list中。

关于2.6内核Makefile语法规则
obj -y += 编辑到内核
obj -m += 编译成模块
obj -n += 或obj - +=不编译到内核

ifeq~endif根据条件进行处理使用该函数.
obj-$(符号)+=根据符号的配置值决定以何种方式编译文件
subdir-$(符号)+=根据符号的配置值决定以何种方式编译子目录文件

arch/xxx/kconfig文件是配置总菜单,使用menuconfig或xconfig命令后将生成.config,而arch/xxx/math-xxx/kconfig是用来设置开发板配置选项的;其余在各个子目录的kconfig用来添删子功能.
为了缩短配置时间应该在arch/xxx/configs中选择一个和你cpu最相近的文件复制到根目录中的.congfig

Linux内核的Makefile与我们平时写的Makefile有所不同,它由五部分组成:
1.Makefile : 顶层Makefile。
2. .config: kernel配置文件。
3. arch/xxx/Makefile: 具体架构的Makefile。(即针对具体CPU来编译生成内核种类zImage Image等)
4. scripts/Makefile.xxx : 通用规则。
5. kbuild Makefile: 整个kernel中大约有数百个这种文件。
内核编译过程如下:
#make menuconfig后,生成 kernel配置文件: .config
顶层Makefile读取.config.
顶层Makefile通过解析 .config来决定递归访问哪些目录中的Kbuild Makefile .
这个过程中,Kbuild Makefile会按.config的设置,逐个添加文件列表,以供最后的编译使用。


原创粉丝点击