linux内核的makefile(中文版+英文版)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linux内核的Makefile123本文档描述了Linux内核的Makefile。===表的内容67===1概述===2,谁做什么9===3的kbuild文件10---3.111---3.2目标定义内置对象的目标-OBJ-Y12---3.3可加载模块的目标-obj的13米---3.4对象导出符号14---3.5库文件的目标-LIB-Y15---3.6目录中的16---3.7编译标志下17---3.8命令行依赖18---3.9依赖关系跟踪19---3.10特殊规则20---3.11$(CC)支持功能21--3.12$(LD)的支持功能===4主机程序支持24---4.1简单的主机程序25---4.2复合主机程序26---4.3定义共享库27---4.4使用C++为2223主机方案28---4.5控制编译器选项为主机程序29---4.6当宿主程序实际是建30---4.7使用hostprogs-$“(CONFIG_FOO)3132===5的Kbuild清洁的基础设施3334===6架构的Makefile35---6.1变量设置调整构建的架构36---6.2先决条件archheaders:37---6.3先决条件到archprepare:38---6.4列出目录访问时降39--6.5体系结构特有的引导映像40---6.6建筑非kbuild的目标41---6.7命令可用于建设的引导映像42---6.8自定义kbuild的命令43---6.9预处理连接器脚本44---6.10的通用头文件4546===7的kbuild语法的出口头47---7.1头-Y48---7.2objhdr-Y49---7.3目的地-Y50---7.4的通用-Y5152===8的Kbuild变量53===9Makefile中的语言54===10积分55===565711TODO===1概述5859的Makefile有五个部分:6061Makefile中最顶层的Makefile。62。配置最顶层的Makefile中读取内核配置文件。63弓/$(ARCH)/Makefile中拱的Makefile。64脚本/Makefile文件。共同的规则等,为所有kbuild的的Makefile。65kbuild的Makefiles中大约有500个,这些6667。配置文件,来从内核配置过程686970最顶层的Makefile是负责建设两个主要产品:vmlinux的71(居民内核映像)和模块(任何模块文件)。72建立这些目标通过递归下降到73内核源代码树。74访问的子目录列表的子目录取决于内核的75配置。最顶层的Makefile文本上有一个拱形的名称拱/$(ARCH)/Makefile中的Makefile76。拱的Makefile提供77架构相关的信息,最顶层的Makefile7879每个子目录下有一个的kbuildMakefile文件执行的命令80从上面传下来的。kbuild的Makefile将使用的81。配置文件构建各种文件列出了使用kbuild的建立82任何内置或模块化的目标。8384脚本/Makefile文件。*/包含了所有的定义规则等85用于kbuild的makefile文件的基础上构建内核。9192868788===28990人有四种不同的关系,与内核的Makefile。*用户*是编译内核的人。这些人的命令,如93“makemenuconfig命令”或“使”。他们通常不读或编辑94任何内核的Makefile中(或任何其他的源文件)。9596*普通开发人员97设备驱动程序,文件系统和网络协议的功能,如工作的人。这些人要保持98kbuild的Makefile中的子系统,它们是99上工作。为了有效地做到这一点,他们需要一些整体的内核的Makefile的知识,再加上102103101公共接口kbuild的详细了解。拱门开发工作的整个架构,SPARC和IA64等104人。拱门开发人员需要了解拱的Makefile105以及kbuild的Makefiles的。kbuild的开发内核构建系统本身工作的人。108这些人都需要了解内核的Makefile中的各个方面。109110106107文件的目的是向正常发展和拱开发商。111112113===3kbuild的文件在内核中是114115的Makefilekbuild的生成文件,使用116的kbuild基础设施。本章介绍kbuild的makefile文件117所使用的语法。118的首选kbuild的文件名是'的Makefile',但'的Kbuild“119,如果一个'Makefile'和'的Kbuild“文件存在,那么”kbuild的“120文件将被使用。121122第3.1节“目标定义”是一个快速的介绍,进一步章节提供123更多细节,用真实的例子。124125---3.1目标定义126127目标定义的主要组成部分(心kbuild的Makefile文件)。128行定义了文件,将建成129选项,任何特殊的编译和任何子目录递归可输入130131最简单的kbuildMakefile文件包含一个热线:132133例:134OBJ-Y+=文件foo.o135136告诉kbuild的目的之一是在该目录中,命名为137foo.o.文件foo.o将建成从foo.c或foo.S.138的139如果foo.o中应建立为一个模块,变量obj-M。140因此经常使用下面的模式:141142例:143的obj-$(CONFIG_FOO)+=foo.o中的144145美元(CONFIG_FOO)的计算结果为y(内置)或M(模块)。146,如果CONFIG_FOO既不是y也没有米,那么该文件将不会被编译147也不是联系在一起的。148149---1501513.2内置对象目标-OBJ-Y的kbuildMakefile中指定的目标文件vmlinux的152$(OBJ-Y)的列表。这些列表依赖于内核的153配置,编译所有的154155的kbuild$(OBJ-Y)的文件。然后,它调用157内置in.o后来被链接到vmlinux的父的Makefile。158159文件的顺序(156“$(LD)-r”的这些文件合并到一个built-in.o文件。的obj-y)是显着的。重复160允许列表的第一个实例将被链接到161内置in.o和成功的实例将被忽略。162163链接的顺序是显着的,因为某些功能将被称为164(module_init()/__initcall的)在在165它们出现的顺序启动。所以记住的链接166为了改变,例如改变您的SCSI167控制器检测到的顺序,从而168169例:drivers/isdn/i4l/Makefile170#171#Makefile中的内核的磁盘都被重新编号。ISDN子系统和设备驱动程序。172#每一个配置选项使文件列表。173的obj-$(CONFIG_ISDN_I4L)+=isdn.o的174的obj-$(CONFIG_ISDN_PPP_BSDCOMP)+=isdn_bsdcomp.o的175176---3.3可加载模块的目标-OBJ-M177180181178$(OBJ-M)指定对象的内置的文件,这些文件可装载179个内核模块一个模块可以构建一个源文件或多个源182文件。在一个源文件的情况下,只是增加了183kbuild的makefile文件的文件$(OBJ-M)的184185例:186#drivers/isdn/i4l/Makefile187的obj-$(CONFIG_ISDN_PPP_BSDCOMP)+=isdn_bsdcomp.o188189注:在这个例子中(CONFIG_ISDN_PPP_BSDCOMP)的计算结果为“M”190191,如果一个内核模块是建立从多个源文件,你指定192要构建一个模块在上述同样的方式,但193kbuild的需求知道你要建立你的194模块的对象文件,所以你必须告诉它通过设置一个$(MODULE_NAME-Y)196197195变量。例:198#drivers/isdn/i4l/Makefile199OBJ(CONFIG_ISDN_I4L)+=isdn.o200ISDN-Y:=isdn_net_lib.oisdn_v110.oisdn_common.o201202在这个例子中,模块的名字将出现在isdn.o.kbuild的203编译对象在$(ISDN-Y)的上市,然后再运行204“$(LD)-r”的名单上的这些文件的,产生isdn.o.205206kbuild的认识(MODULE_NAME-y)的复合对象,207你可以使用CONFIG_符号的价值,可以选择作为一个复合对象的一部分,包括一个208的目标文件。209210例:211#fs/ext2/Makefile212的obj-$(CONFIG_EXT2_FS)+=ext2.o213EXT2-Y:=balloc.odir.ofile.o的ialloc.oinode.oioctl.o\214namei.osuper.osymlink.o215的ext2-$(CONFIG_EXT2_FS_XATTR)+=xattr.o在这个例子中xattr_user.o\217218216xattr_trusted.o,xattr.o,xattr_user.o和xattr_trusted.o,只有219的一部分,复合对象ext2.o的,如果$(CONFIG_EXT2_FS_XATTR)220计算结果为“y”。221222注意:当然,当你构建到内核中的对象,223上面的语法也将正常工作。所以,如果你有CONFIG_EXT2_FS,Y,224kbuild的建立一个ext2.o的文件,你的个人225,然后连接到内置in.o,正如你所期望的。226227---3.4物体导出符号228229无特殊符号需要在Makefile中的230模块的导出符号。231232---3.5库文件的目标-LIB-Y233234上市与obj-*用于模块或235组合在一个内置的对象lib.a.238-in.o特定的目录。236也有可能列出对象,将一个库中包含237,用lib-Y列出的所有对象结合在一个单一的239该目录库。240中列出的对象在OBJ-Y和另外列出的241的lib-Y将不会被包含在库中,因为他们将242无论如何是可访问的。243为了保持一致性,在lib-M中列出的对象将被纳入党人244245注的kbuildmakefile文件列出的文件被内置在246库的一部分。因此,在同一目录247可以同时包含一个内置的in.o和党人文件。248249例:250#251LIB-Yarch/x86/lib/Makefile:252=delay.o:253这将创建一个库党人根据delay.o。目录255到254的kbuild真正认识到,有一个lib.a正在兴建,应在libs-Y上市。256另请参见“6.4列出目录访问时降”。通常只限于257258使用的lib-Y到lib/和arch/*/lib目录下。259260---3.6下的目录中的261262的Makefile只负责建设自己的263目录中的对象。子目录中的文件应该被照顾的264在这些子目录中的Makefile。生成系统将自动265子目录中的递归调用make,只要你让它知道他们266267268要做到这一点,使用的obj-y和obj-M269EXT2生活在一个单独的目录中,和Makefile目前在FS/270告诉kbuild的下降,使用下面的赋值。271272例:273#fs/Makefile文件中274的obj-$(CONFIG_EXT2_FS)+=EXT2/275276,如果CONFIG_EXT2_FS设置为'Y'(内置)或“M”(模块化)277相应的obj-变量设置,kbuild的将下降278ext2的目录中。279的Kbuild只使用这些信息来决定,它需要访问280的目录,它是Makefile中281指定的模块是什么,什么是内置的。282

1 / 27
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功