曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3647|回复: 0
打印 上一主题 下一主题

KBuild MakeFile

[复制链接]

35

主题

36

帖子

1969

积分

版主

Rank: 7Rank: 7Rank: 7

积分
1969
跳转到指定楼层
楼主
发表于 2011-5-15 21:08:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
从Linux内核2.6开始,Linux内核的编译采用 Kbuild 系统,这同过去的编译系统有很大的不同,尤其对于 Linux 内核模块的编译。在新的系统下,Linux 编译系统会两次扫描 Linux 的 Makefile :首先编译系统会读取 Linux 内核顶层的 Makefile,然后根据读到的内容第二次读取 Kbuild 的 Makefile 来编译Linux内核。

Linux内核Makefile分类

Kernel Makefile
Kernel Makefile位于Linux内核源代码的顶层目录,也叫 Top Makefile。它主要用于指定编译 Linux Kernel 目标文件(vmlinux)和模块(module)。这编译内核或模块是,这个文件会被首先读取,并根据读到的内容配置编译环境变量。对于内核或驱动开发人员来说,这个文件几乎不用任何修改。

Kbuild Makefile
Kbuild 系统使用 Kbuild Makefile 来编译内核或模块。当 Kernel Makefile 被解析完成后,Kbuild 会读取相关的 Kbuild Makefile 进行内核或模块的编译。Kbuild Makefile 有特定的语法指定哪些编译进内核中、哪些编译为模块、及对应的源文件是什么等。内核及驱动开发人员需要编写这个Kbuild Makefile 文件。

ARCH Makefile
ARCH Makefile位于ARCH/$(ARCH)/Makefile,是系统对应平台的Makefile。Kernel Top Makefile会包含这个文件来指定平台相关信息。只有平台开发人员会关心这个文件。


Kbuild Makefile
Kbuild Makefile 的文件名不一定是 Makefile,尽管推荐使用 Makefile 这个名字。大多的 Kbuild文件 的名字都是 Makefile。为了与其他Makefile文件相区别,你也可以指定Kbuild Makefile的名字为 Kbuild。而且如果 “Makefile” 和 “Kbuild” 文件同时存在,则 Kbuild 系统会使用 “Kbuild” 文件。

目标定义
Kbuild Makefile的一个最主要功能就是指定编译什么,这个功能是通过下面两个对象指定的 obj-? 和 xxx-objs :
obj-?

obj-? 指定编译什么,怎么编译?其中的 “?” 可能是 “y” 或 “m”,“y”指定把对象编译进内核中,“m”指定把对象编译为模块。语法如下;
obj-? = $(target).o
target为编译对象的名字。如果没有指定xxx-objs,这编译这个对象需要的源文件就是$(target).c或$(target).s。如果指定了$(target)-objs,则编译这个对象需要的源文件由$(target)-objs指定,并且不能有$(target).c或$(target).s文件。

xxx-objs

xxx-objs指定了编译对象需要的文件,一般只有在源文件是多个时才需要它。

只要包含了这两行,Kbuild Makefile就应该可以工作了。

嵌套编译
有时一个对象可能嵌入到另一个对象的目录下,那个如何编译子目录下的对象呢?其实很简单,只要指定 obj-? 的对象为子目录的名字就可以了:
obj-? = $(sub_target)/
其中 “?” 可以是 “y” 或 “m”,$(sub_target) 是子目录名字。

编译器选项
尽管在大多数情况下不需要指定编译器选项,有时我们还是需要指定一些编译选项的:
ccflags-y, asflags-y and ldflags-y
这些编译选项用于指定cc、as和ld的编译选项。
本人冰火岛大学毕业,获武学奇才与医学精英双硕士学位,精通《九阳神功》,《乾坤大挪移》,《七伤拳》,《太极拳》以及各种医术毒经;熟练掌握《咯吱功》(专咯吱敏敏)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-6-18 23:22 , Processed in 0.075009 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表