编译总体过程
- 编译host工具
- 编译交叉工具链
- 编译内核模块
- 编译ipk
- 安装ipk到文件系统
- 编译内核
- 将内核和文件系统组合成最终binary
顶层Makefile分析
在顶层Makefile里比较麻烦的是,将Makefile分为了两个主要分支,第一个部分主要是执行编译前的准备,第二个部分是执行编译。在每个分支里通过include载入相应的文件,在这些文件里包含相应的目标执行命令,在命令中多次用make+目标+参数的方式,则会再次执行Makefile文件,就形成了Makefile的嵌套执行。在嵌套执行的过程中,通过变量OPENWRT_BUILD来区分是执行顶层Makefile的那个部分,如果在make命令行中有OPENWRT_BUILD为0,则执行第一个部分,没有加OPENWRT_BUILD变量则执行第二个部分。
由于OPENWRT_BUILD是make命令行参数,所以在Makefile中如果要改变它的值,就用到了override指示符。
target/Makefile、package/Makefile、tools/Makefile、toolchain/Makefile这四个子目录下的Makefile实际上是不能独立执行。主要利用$(INCLUDE_DIR)/subdir.mk动态建立规则,诸如$(toolchain/stamp-install)目标是靠$(INCLUDE_DIR)/subdir.mk的stampfile函数动态建立。
$(package/stamp-compile): $(target/stamp-compile) $(package/stamp-cleanup)
这类使用变量命名的目标&#