2 6内核Makefile简单语法与应用

发布 2021-05-11 10:40:28 阅读 5351

2.6内核makefile简单语法与应用。

1.1概述。

2.6的makefile的写法和应用相对于2.4有了一些变化,可能对于很多人来说,因为找不到相关的文档,都是模仿内核中已有的文件来写自己的makefile。

其实,在kernel source的documentation/kbuild目录下面,还是有对内核makefile语法的详细说明的。在这里就2.6内核中makefile最常见的简单应用情况做一个翻译和归纳介绍。

2.6内核的makefile分为5个组成部分:

l最顶层的makefilel内核的。config配置文件。

l在arch/$(arch)目录下的体系结构相关的makefile

l在scripts/目录下的makefile.*文件,是一些makefile的通用规则l各级目录下的大概约500个kbuild makefile文件。

顶层的makefile文件读取。config文件的内容,并总体上负责build内核和模块。arch makefile则提供补充体系结构相关的信息。

scripts目录下的makefile文件包含了所有用来根据kbuild makefile构建内核所需的定义和规则。1.2 kbuild makefile

对于makefiles的不同组成部分,有一些不同的语法规则。针对的对象也不同,对于大部分内核模块或设备驱动的开发者和使用者来说,最常接触到的就是各层目录下基于kbuild架构的kbuild makefile文件。kbuild makefile的语法结构非常简单,核心内容主要包括1.

2.1目标定义。

目标定义就是用来定义哪些内容要做为模块编译,哪些要编译链接进内核。例如。

obj-y +=

表示要由或者文件编译得到并链接进内核,而obj-m则表示该文件要作为模块编译。除了y,m以外的obj-x形式的目标都不会被编译。

而更常见的做法是根据。config文件的config_变量来决定文件的编译方式,如:obj-$(config_isdn) +

obj-$(config_isdn_ppp_bsdcomp) +isdn_

除了obj-形式的目标以外,还有lib-y library库,hostprogs-y主机程序等目标,但是基本都应用在特定的目录和场合下。1.2.2多文件模块的定义。

最简单的kbuild makefile如上一节一句话的形式就够了,如果一个模块由多个文件组成,那么稍微复杂一些,采用模块名加–objs后缀或者–y后缀的形式来定义模块的组成文件。如以下例子:obj-$(config_ext2_fs) +

ext2-$(config_ext2_fs_xattr) +

模块的名字为ext2,由和两个目标文件最终链接生成直至文件,是否包括取决于内核配置文件的配置情况。如果config_ext2_fs的值是y也没有关系,在此过程中生成的将被链接进最终链接进内核。这里需要注意的一点是,该kbuild makefile所在的目录中不应该再包含和模块名相同的源文件如。

或者写成如-objs的形式:

obj-$(config_isdn) +

isdn-objs :=isdn_net_ isdn_ isdn_目录层次的迭代如下例:

obj-$(config_ext2_fs) +ext2/

如果config_ext2_fs的值为y或m,kbuild将会将ext2目录列入向下迭代的目标中,但是其作用也仅限于此,具体ext2目录下的文件是要作为模块编译还是链入内核,还是有ext2目录下的makefile文件的内容来决定的。

1.2.4模块的编译。

编译模块的时候,你可以将模块放在**树中,用make modules的方式来编译你的模块,你也可以将模块相关文件目录放在**树以外的位置,用如下命令来编译模块:make -c path/to/kernel/src m=$pwd modules

c指定**树的位置,m=$pwd或m=`pwd`告诉kbuild回到当前目录来执行build操作。1.2.5模块的安装。

当你需要将模块安装到非默认位置的时候,你可以用install_mod_path指定一个前缀,如:make install_mod_path=/foo modules_install模块将被安装到/foo/lib/modules目录下。

简单闽南语200句

1.你好!汝好 l h 2.大家好。逐个好 ta?k h 3.早上好 敖早 gau ch 4.我是小陈 我是小陈 g a s si tan 5.你是小陈吗?汝是小陈唷?l s si tan heh?6.我是 我不是。我着是 我毋是啦 g a to?h s g a m?s lah.7.不好意思 歹势啦...

简单祝福语(50句)

简单祝福语。无论是在学校还是在社会中,大家总免不了要接触或使用祝福语吧,根据祝愿的对象不同,祝福语分为吉日喜庆祝福语 寿诞祝福语 事业祝福语 祝酒词等。你所见过的祝福语是什么样的呢?下面是小编帮大家整理的简单祝福语 精选50句 供大家参考借鉴,希望可以帮助到有需要的朋友。1 清水在冰块的心里,微风在...

意大利语语法简单掌握

1 最简单的句子 由主谓宾组成 io sono uno studente 我是一位学生。这里大家要记住的是io是可以省略的,因为在意大利语中动词就已经含由主语了所以io sono uno studente也可以变成sono uno studente sono则是由动词essere的第一人称,在意大利...