linux 2.6内核makefile浅析

linux 2.6内核makefile浅析

ID:6127585

大小:37.52 KB

页数:12页

时间:2018-01-04

linux 2.6内核makefile浅析_第1页
linux 2.6内核makefile浅析_第2页
linux 2.6内核makefile浅析_第3页
linux 2.6内核makefile浅析_第4页
linux 2.6内核makefile浅析_第5页
资源描述:

《linux 2.6内核makefile浅析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、1 概述Makefile由五个部分组成:·Makefile:根目录Makefile,它读取.config文件,并负责创建vmlinux(内核镜像)和modules(模块文件)。·.config:内核配置文件(一般由makemenuconfig生成)。·arch/$(ARCH)/Makefile:目标处理器的Makefile。·scripts/Makefile.*:所有kbuildMakefile的规则,它们包含了定义/规则等。·kbuildMakefiles:每个子目录都有kbuildMakefile,它们负责生成built-in或模块化目标。(注意:kbuildMak

2、efile是指使用kbuild结构的Makefile,内核中的大多数Makefile都是kbuildMakefile。)2kbuild文件2.1obj-y和obj-m         最简单的kbuildMakefile可以仅包含:obj-$(CONFIG_FOO)+=foo.o         其中$(CONFIG_FOO)可以等于y或m,它的值由.config文件给出。如果$(CONFIG_FOO)既不是y也不是m,那么该文件不会被编译和链接         当$(CONFIG_FOO)等于y时,上面语句等价于obj-y+=foo.o,它告诉kbuild在当前目录下

3、,有一个叫做foo.o的目标文件,它将从foo.c或则foo.S编译得到。         当$(CONFIG_FOO)等于m时,表示foo.o需要被编译成模块。2.1.1obj-y生成built-in.o         Kbuild编译所有的$(obj-y)文件,并调用”$(LD)-r”把所有这些文件合并到built-in.o文件。这个built-in.o会被上一级目录的Makefile使用,最终链接到vmlinux中。2.1.2 目标由多个源文件编译得到         如果某个目标由多个源文件编译得到,那么可以通过$(-objs)或$(-y)把这些源文件告诉kb

4、uild。Kbuild能够识别后缀-objs和-y,例如:         #drivers/isdn/i4l/Makefile         obj-$(CONFIG_ISDN)+=isdn.o         isdn-objs:=isdn_net_lib.oisdn_v110.oisdn_common.o         Kbuild会编译所有$(isdn-objs)中的对象,并调用"$(LD)-r"把它们链接成isdn.o文件。         下面是一个使用后缀-y的例子。后缀-y的好处是,可以使用CONFIG_XXX符号来决定是否加入某些源文件(.o从对应

5、的.c或.S编译得到):         #fs/ext2/Makefile         obj-$(CONFIG_EXT2_FS)        +=ext2.o         ext2-y                       :=balloc.obitmap.o         ext2-$(CONFIG_EXT2_FS_XATTR)+=xattr.o2.1.3 调用子目录Makefile         Makefile只负责编译当前目录中的对象。子目录中的对象,由子目录中的Makefile负责。如何让make调用子目录中的Makefile?答案是把

6、子目录包含到obj-y或obj-m中。例如:         #fs/Makefile         obj-$(CONFIG_EXT2_FS)+=ext2/         当CONFIG_EXT2_FS为y或m时,kbuild系统会在ext2目录中调用make命令(也即调用ext2目录中的Makefile)2.2lib-y和lib-m         在一个目录下,obj-y所列出的文件,将被编译成built-in.o文件,而lib-y或lib-m所列出的文件,将在当前目录下生成lib.a文件。         注意:一般lib-y或lib-m只用在lib/和ar

7、chlib目录中。    ---3.6目录递归    makefile文件负责编译当前目录下de目标文件,子目录中de文件由子目录中demakefile文件负责编译。编译系统将使用obj-y和obj-m自动递归编译各个子目录中文件。    如果ext2是一个子目录,fs目录下demakefile将使用以下赋值语句是编译系统编译ext2子目录。    例如:#fs/Makefile    obj-$(CONFIG_EXT2_FS)+=ext2/    如果CONFIG_EXT2_FS设置成'y(built-in)或'm'(modular),

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。