2.6 内核的源码树目录下一般都会有两个文文: Kconfig 和 Makefile 。分布在各目录下的 Kconfig 构成了一个分布式的内核配置数据库,每个 Kconfig 分别描述了所属目录源文件相关的内核配置菜单。在内核配置 make menuconfig( 或 xconfig 等 ) 时,从 Kconfig 中读出配置菜单,用户配置完后保存到 .config( 在顶层目录下生成 ) 中。在内核编译时,主 Makefile 调用这个 .config ,就知道了用户对内核的配置情况。
上面的内容说明:
Kconfig
就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,可以通过修改
Kconfig
来增加对我们驱动的配置菜单,这样就有途径选择我们的驱动,假如想使这个驱动被编译,还要修改该驱动所在目录下的
Makefile
。
因此,一般添加新的驱动时需要修改的文件有两种(注意不只是两个)
*Kconfig
*Makefile
要想知道怎么修改这两种文件,就要知道两种文档的语法结构。
First:
Kconfig
每个菜单项都有一个关键字标识,最常见的就是
config
。
语法:
config symbol
options
symbol
就是新的菜单项,
options
是在这个新的菜单项下的属性和选项
其中
options
部分有:
1
、类型定义:
每个
config
菜单项都要有类型定义,
bool
:布尔类型,
tristate
三态:内建、模块、移除,
string
:字符串,
hex
:十六进制,
integer
:整型
例如
config
HELLO_MODULE
bool "hello test module"
bool
类型的只能选中或不选中,
tristate
类型的菜单项多了编译成内核模块的选项,假如选择编译成内核模块,则会在
.config
中生成一个
CONFIG_HELLO_MODULE=m
的配置,假如选择内建,就是直接编译成内核影响,就会在
.config
中生成一个
CONFIG_HELLO_MODULE=y
的配置
.
2
、依赖型定义
depends
on
或
requires
指此菜单的出现是否依赖于另一个定义
config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
这个例子表明
HELLO_MODULE
这个菜单项只对
XScale
处理器有效,即只有在选择了
ARCH_PXA
,
该菜单才可见
(
可配置
)
。
3
、帮助性定义
只是增加帮助用关键字
help
或
---help---
更多详细的 Kconfigconfig 语法可参考:
Second:
内核的
Makefile
内核的
Makefile
分为
5
个组成部分:
Makefile
最顶层的
Makefile
.config
内核的当前配置文档,编译时成为顶层
Makefile
的一部分
arch/$(ARCH)/Makefile
和体系结构相关的
Makefile
s/ Makefile.*
一些
Makefile
的通用规则
kbuild Makefile
各级目录下的大概约
500
个文档,编译时根据上层
Makefile
传下来的宏定义和其他编译规则,将源代码编译成模块或编入内核。
顶层的
Makefile
文档读取
.config
文档的内容,并总体上负责
build
内核和模块。
Arch Makefile
则提供补充体系结构相关的信息。
s
目录下的
Makefile
文档包含了任何用来根据
kbuild Makefile
构建内核所需的定义和规则。
(其中 .config 的内容是在 make menuconfig 的时候,通过 Kconfig 文档配置的结果)
在
linux2.6.x/Documentation/kbuild
目录下有详细的介绍有关
kernel makefile
的知识。
最后举个例子:
假设想把自己写的一个
flash
的驱动程式加载到工程中,而且能够通过
menuconfig
配置内核时选择该驱动该怎么办呢?能够分三步:
第一:将您写的
flashtest.c
文档添加到
/driver/mtd/maps/
目录下。
第二:修改
/driver/mtd/maps
目录下的
kconfig
文档:
config MTD_flashtest
tristate “ap71 flash"
这样当
make
menuconfig
时
,将会出现
ap71 flash
选项。
第三:修改该目录下
makefile
文档。
添加如下内容:
obj-$(CONFIG_MTD_flashtest)
+= flashtest.o
这样,当您运行
make
menucofnig
时,您将发现
ap71
flash
选项,假如您选择了此项。该选择就会保存在
.config
文档中。当您编译内核时,将会读取
.config
文档,当发现
ap71 flash
选项为
yes
时,系统在调用
/driver/mtd/maps/
下的
makefile
时,将会把
flashtest.o
加入到内核中。即可达到您的目的。
1493

被折叠的 条评论
为什么被折叠?



