您的位置:首页 > 运维架构 > Linux

关于Linux kernel中的config配置和makefile的组织

2013-06-03 22:45 344 查看
以前对linux kernel的编译有个大概的了解,内中的细节却没有花时间去研究。今天看到一篇关于linux kernel配置编译的解说,说的和自己理解的差不多,而且博主研究的也比我详细。故引用之,以便加深学习。

基于转载,当然也补充一点:make config是如何将多级目录中的kconfig囊括在一起的呢?这个要注意一个语法:source。

在多层目录中,主目录的kconfig文件会将次层多个文件或者module中的kconfig收集起来,以供上层目录kconfig使用。比如下面/driver目录中的kconfig:

# drivers/Kconfig

menu "Device Drivers"

source "drivers/base/Kconfig"

source "drivers/connector/Kconfig"

source "drivers/mtd/Kconfig"

------------------以下转载----------------------------

Kconfig:内核配置脚本文件,每个内核配置文件中的config都在make menuconfig中对应一个相应的菜单选项。

基本语法:

1、菜单入口

示例:

config MODVERSIONS

bool "Set vertion information on all module symbols"

depends on MODULES

default n

help

Usually, modules have to be recompiled whenever you switch to a new kernel. ...

“config”关键字定义新的配置选项,之后几行定义了该配置选项的属性。属性包括类型、数据范围、输入提示、依赖关系(及反向依赖关系)、帮助信息和默认值等。类型:bool、tristate、string、hex、int。(tristate和string是基本类型,其他类型基于基本类型)输入提示:prompt <prompt [if <expr>]>依赖关系:depends on (或requires)
<expr> 多个依赖关系间用"&&"间隔反向依赖关系:select <symbol> [if <expr>]depends能限定symbol的上限,即如果A依赖B,则B被配置为Y时,A可以为Y/M/N;B被配置为M时,A可以为M/N;B在被配置为N的情况下,A只能为N。select能限定symbol的下限,若A反向依赖于B,则A的配置值会高于或等于B(与depends相反)。默认值:default <expr> [if <expr>] 一个选项可以有任意个默认值,但只有第一个被定义的值是可用的。帮助信息:help(或---help---)
开始 ...... 结束2、菜单结构示例1:

menu "Network device support"

depends on NET

config NETDEVICES

...

endmenu

所有config选项都成为menu的子菜单,而且集成父菜单的依赖关系。示例2:

config MODULES

bool "Enable loadable module support"

config MODVERSIONS

bool "Set version information on all module symbols"

depends on MODULES

通过依赖关系创建菜单,复选项为N,子选项不可见;复选项为Y,子选项可见。

=======================================================================================================================

Makefile:模块编译文件

基本语法:

1、目标定义:用来定义哪些内容要作为模块编译,哪些要编译并连接进内核

obj-$(CONFIG_ISDN) += isdn.o

根据.config文件的CONFIG_变量来决定文件的编译方式

2、多文件模块定义

obj-$(CONFIG_EXT2_FS) += ext2.o

ext2-y := balloc.o bitmap.o

ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o

模块名为ext2,由balloc.o和bitmap.o最终连接生成ext2.o直至ext2.ko,是否包括xattr.o根据内核配置情况。

3、目录层次的迭代

obj-$(CONFIG_EXT2_FS) += ext2/

当CONFIG_EXT2_FS的值为y或m时,将会把ext2目录列入向下迭代的目标中,具体ext2目录下的文件是要作为模块编译还是链接入内核由ext2目录下的Makefile决定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: