【第22期】观点:IT 行业加班,到底有没有价值?

Kconfig和makefile的关系

转载 2017年01月03日 21:49:32

文章的原地址是:

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 加入到内核中。即可达到您的目

举报

相关文章推荐

Kconfig menuconfig .config Makefile之间的关系及如何在内核中添加驱动

Kconfig: 内核源码中每一级目录下都会有Kconfig,其中的menu对应make menucofig中的每一个选项, source表示该目录框架下所包含各个目录或文件的 Kconfig,由此构...

《Linux内核修炼之道》精华分享与讨论(5)——Kernel地图:Kconfig与Makefile

推荐博文:Linux内核“问题门”——学习问题、经验集锦 &lt;!--EndFragment--&gt; 推荐下载:《Linux内核修炼之道》精华版之方法论 <

Linux kernel的 Makefile和Kconfig以及Make menuconfig的关系

Linux kernel的 Makefile和Kconfig以及Make menuconfig的关系 熟悉内核的Makefile对开发设备驱动、理解内核代码结构都是非常重要的 linu...

Makefile与Kconfig和.config关系与使用

文章转自 http://blog.sina.com.cn/s/blog_4a377e150100c896.html           http://blog.sina.com.cn/s/blog_...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)