本文翻译文档的原英文文档位于linux内核源码树
的/Documentation/kbuild目录下
Linux内核的Makefiles
这个文档描述Linux内核的Makefiles
=== 目录
===1 概要
===2 Makefiles对于不同角色的作用
===3 kbuild文件
--- 3.1 目标定义
--- 3.2 Built-in对象目标 - obj-y
--- 3.3 可加载模块目标 - obj-m
--- 3.4 导出符号的对象
--- 3.5 库文件目标 - lib-y
--- 3.6 进入子目录
--- 3.7 编译标记
--- 3.8 命令行依赖项
--- 3.9 依赖性跟踪
--- 3.10 特殊规则
--- 3.11 $(CC) 支持的函数
===4 主机程序支持
--- 4.1 一个简单的支持主机程序例子
--- 4.2 复合主机程序
--- 4.3 定义共享库
--- 4.4 使用C的主机程序
--- 4.5 控制主机程序的编译选项
--- 4.6 主机程序的最终建立
--- 4.7 使用hostprogs-$(CONFIG_FOO)
===5 Kbuild的清除机制
===6 具体架构的Makefiles
--- 6.1 设置用来调整生成架构的变量
--- 6.2 增加先决条件到archprepare
--- 6.3 递归时列出需要访问的目录
--- 6.4 与架构相关的启动映像
--- 6.5 建立非kbuild的目标
--- 6.6 用来建立启动映像的命令
--- 6.7 自定义kbuild命令
--- 6.8 预处理链接脚本
===7 Kbuild变量
===8 Makefile语言
===9 贡献者
===10 下一步的工作
=== 1 概要
Makefiles包含下面5个部分:
Makefile 顶层Makefile文件.
.config 内核配置文件
arch/$(ARCH)/Makefile 体系架构的Makefile文件.
scripts/Makefile.* 对于所有kbuild和Makefiles都有效的规则等
kbuildMakefiles 大约有500个makefiles
顶层Makefiles读取内核配置程序生成的.config文件。
顶层Makefile用来生成两个主要的目标:vmlinux(内核映像)和模块(任何模块文件)。
Makefile通过递归遍历内核树中的所有子目录来生成这些目标。
递归访问的子目录列表时依靠内核配置文件来决定的。顶层Makefile包含一个名叫arch/$(ARCH)/Makefile的体系架构Makefile。这个Makefile文件向顶层Makefile提供具体的架构信息。
每个子目录都有一个kbuild Makefile,这个Makefile承载着从上层Makefile传递下来的命令。kbuild Makefile使用.config文件中的信息来生成文件列表,kbuild使用这个文件列表来决定生成需要加载入内核的目标或者模块。
scripts/Makefile.*包含了所有的定义、规则等等。基于kbuild makefiles使用这些定义、规则可以构建内核。
=== 2 Makefiles对于不同角色的作用
有四类不同的人会用到Makefiles。
*用户*是生成内核的人。这类人通常使用“make menuconfig”或者“make”命令。他们通常不去阅读或者修改makefile文件(或者其它任何源文件)。
*一般的开发者*是工作在内核外层的人,比如设备驱动,文件系统以及网络协议。这些人需要去维护他们修改的子系统的kbuild Makefiles。为了有效地去实现这些工作,他们通常取药一些关于内核makefile的整体知识,加上一些关于kuild公共接口的具体信息。
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-40628-1.html
光看数量就行了
只有成大神才有钱拿
消灭一切反动派