欢迎来到天天文库
浏览记录
ID:34467377
大小:227.11 KB
页数:25页
时间:2019-03-06
《linux内核makefile》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Linux内核2.6Makefile文件===目录===1概述===2角色分工===3内核编译文件---3.1目标定义---3.2内嵌对象-obj-y---3.3可加载模块-obj-m---3.4导出符号---3.5库文件-lib-y---3.6目录递归---3.7编译标记---3.8命令依赖---3.9依赖关系---3.10特殊规则===4辅助程序---4.1简单辅助程序---4.2组合辅助程序---4.3定义共享库---4.4C++语言使用方法---4.5辅助程序编译控制选项---4.6何时建立辅助程序---4.
2、7使用hostprogs-$(CONFIG_FOO)===1概述Makefile包括五部分:Makefile顶层Makefile文件.config内核配置文件arch/$(ARCH)/Makefile机器体系Makefile文件scripts/Makefile.*所有内核Makefiles共用规则kbuildMakefiles其它makefile文件通过内核配置操作产生.config文件,顶层Makefile文件读取该文件的配置。顶层Makefile文件负责产生两个主要的程序:vmlinux(内核image)和模块。
3、顶层Makefile文件根据内核配置,通过递归编译内核代码树子目录建立这两个文件。顶层Makefile文件文本一个名为arch/$(ARCH)/Makefile的机器体系makefile文件。机器体系Makefile文件为顶层makefile文件提供与机器相关的信息。每一个子目录有一个makefile文件,子目录makefile文件根据上级目录makefile文件命令启动编译。这些makefile使用.config文件配置数据构建各种文件列表,并使用这些文件列表编译内嵌或模块目标文件。scripts/Makefile
4、.*包含了所有的定义和规则,与makefile文件一起编译出内核程序。===2角色分工人们与内核makefile存在四种不同的关系:*用户*用户使用"makemenuconfig"或"make"命令编译内核。他们通常不读或编辑内核makefile文件或其他源文件。*普通开发者*普通开发者维护设备驱动程序、文件系统和网络协议代码,他们维护相关子系统的makefile文件,因此他们需要内核makefile文件整体性的一般知识和关于kbuild公共接口的详细知识。*体系开发者*体系开发者关注一个整体的体系架构,比如spar
5、c或者ia64。体系开发者既需要掌握关于体系的makefile文件,也要熟悉内核makefile文件。*内核开发者*内核开发者关注内核编译系统本身。他们需要清楚内核makefile文件的所有方面。本文档的读者对象是普通开发者和系统开发者。===3内核编译文件内核中大多数makefile文件是使用kbuild基础架构的makefile文件。本章介绍kbuild的makefile中的语法。3.1节“目标定义”是一个快速导引,后面各章有详细介绍和实例。---3.1目标定义目标定义是makefile文件的主要部分(核心)。这
6、些目标定义行定义了如何编译文件,特殊的兼容选项和递归子目录。最简单的makefile文件只包含一行:Example:obj-y+=foo.o这行告诉kbuild在该目录下名为foo.o的目标文件(object),foo.o通过编译foo.c或者foo.S而得到。如果foo.o编译成一个模块,则使用obj-m变量,因此常见写法如下:Example:obj-$(CONFIG_FOO)+=foo.o$(CONFIG_FOO)可以代表y(built-in对象)或m(module对象)。如果CONFIG_FOO不是y或m,那么
7、这个文件不会被编译和链接。---3.2内嵌对象-obj-ymakefile文件将为编译vmlinux的目标文件放在$(obj-y)列表中,这些列表依赖于内核配置。Kbuild编译所有的$(obj-y)文件,然后调用"$(LD)-r"合并这些文件到一个built-in.o文件中。built-in.o经过父makefile文件链接到vmlinux。$(obj-y)中的文件顺序很重要。列表中文件允许重复,文件第一次出现将被链接到built-in.o,后续出现该文件将被忽略。链接顺序之所以重要是因为一些函数在内核引导时将按照
8、他们出现的顺序被调用,如函数(module_init()/__initcall)。所以要牢记改变链接顺序意味着也要改变SCSI控制器的检测顺序和重数磁盘。例如:#drivers/isdn/i4l/Makefile#内核ISDN子系统和设备驱动程序Makefile#每个配置项是一个文件列表obj-$(CONFIG_ISDN)+=isdn.oobj
此文档下载收益归作者所有