日期 | 内核版本 | 架构 |
---|---|---|
2022-10-08 | Linux5.4.200 | ARM64 |
上一节我们介绍了vmlinux的编译过程。vmlinux是一个ELF文件,上百M,无法直接flash到板子上。不同架构最终生成的启动镜像略有区别,一般地:
- 通过编译生成
vmlinux
和System.map
- 通过
objcopy
移除vmlinux
中不必要段,输出binary格式Image - 再对Image进行压缩,输出不同格式的压缩文件,比如gzip对应的
Image.gz
, - 最后通过工具加上BootLoader可以识别的header用于启动引导。
我们重点关注arm64架构的编译情况。
根目录的Makefile include了不同架构的Makefile文件:
https://elixir.bootlin.com/linux/v5.4.200/source/Makefile#L583
1 | include arch/$(SRCARCH)/Makefile |
arm64下的Makefile中:
1 | # Default target when executing plain make |
由此可以发现,arm64的启动镜像为压缩后的Image.gz
.
再进一步走到boot目录下的Makefile/arch/arm64/boot/Makefile
1 | OBJCOPYFLAGS_Image :=-O binary -R .note -R .note.gnu.build-id -R .comment -S |
install脚本如下/arch/arm64/boot/install.sh
1 | # Arguments: |
用一张图总结如下: