makefile_分析方法
makefile_分析方法
本章节带你分析 makefile
为什么要分析 makefile
uboot 代码庞大且复杂
支持多架构(x86, arm, riscv)
多模块(fs, cmd, driver)
手动编译不可能,必须自动化编译
实现自动化编译需要借助构建系统 gnu_make
gnu_make 工作需要 makefile(规则文件)
makefile 会控制编译全过程
移植 uboot 一定会修改/创建文件
文件放在那里?怎么参与编译?
必须分析 makefile 才能找到答案
怎么分析 makefile
uboot makefile 同样复杂
顶层 makefile 3000 行
子级 makefile 2000 行
阅读 makefile 文件是不行的!
必须用聪明的方法
make --trace 参数可以输出被调用目标,缩小了分析范围
但还是不行
makefile 虽然不会调用所有目标
但是编译 uboot 调用的目标数量大于 1000
顺序分析还是行不通
最终烧录到开发板的文件是 u-boot.bin
u-boot.imx u-boot.img 是针对芯片 bootrom 定制的包装
但内部装的都是 u-boot.bin
所以只分析 u-boot.bin 生成过程中调用的目标!
但还是不行
仅分析 u-boot.bin 都调用了 800 多个目标
还要精简
如果你仔细观察 make --trace -j12 u-boot.bin 输出
你会发现大量不重要的生成输出(tools/ lib/ arch/ ...)
这些文件很重要
但是对于移植分析是无用的,全部都可以筛选掉
对移植分析有用的生成输出(scripts/ include/ driver/ board/ ...)
并且大部分目标被重复调用
因此分析复用目标,调用参数,生成文件就可以了!
最终需要分析的目标规则不到 200
总结
本章节讨论了为什么分析 makefile
怎么分析 makefile
并且有了明确的方法