Kconfig和makefile的关系

本文详细介绍了Linux内核配置过程中的关键文件Kconfig和Makefile的作用及使用方法。阐述了如何通过Kconfig定义配置项及其属性,如类型、依赖和帮助信息,并解释了Makefile在构建过程中的角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章的原地址是:

http://wenku.baidu.com/link?url=Yl5eiPf3P7TMhk24Kl5bMMNyWEM4ctHdT46M4ltz07qBPuWswCid3rGC5zxaGPLa3sawP8m4ZaqB0dIXmhlKF_2yBMUvxt9c5Q70MOevdhS

linux 内核中 Kconfig 文档的作用

内核源码树的目录下都有两个文档 Kconfig2.4 版本是 Config.in)和 Makefile。分布到各目录的
Kconfig 构成了一个分布式的内核配置数据库,每个 Kconfig 分别描述了所属目录源文档相关的内核
配置菜单。在内核配置
make menuconfig(xconfig )时,从 Kconfig 中读出菜单,用户选择后保
存到
.config 的内核配置文档中。 在内核编译时,主 Makefile 调用这个.config,就知道了用户的选择。
上面的内容说明了,
Kconfig 就是对应着内核的配置菜单。假如要想添加新的驱动到内核的源码中,
能够修改
Kconfig,这样就能够选择这个驱动,假如想使这个驱动被编译,要修改 Makefile
因此添加新的驱动时需要修改的文档有两种(注意不只是两个)
*Kconfig
*Makefile
要想知道怎么修改这两种文档,就要知道两种文档的语法结构。
First:Kconfig
每个菜单都有一个关键字标识,最常见的就是 config
语法:
config
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 处理器有效。
3、帮助性定义
只是增加帮助用关键字
help ---help---
Second:
内核的 Makefile
linux2.6.x/Documentation/kbuild 目录下有周详的介绍有关 kernel 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 文档配置的结果)
举个例子:
假设想把自己写的一个
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 加入到内核中。即可达到您的目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值