上一节我们介绍了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
include arch/$(SRCARCH)/Makefile
arm64下的Makefile中:
# Default target when executing plain make
boot := arch/arm64/boot
KBUILD_IMAGE := $(boot)/Image.gz
all: Image.gz
Image: vmlinux
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
Image.%: Image
$(Q)$(MAKE) $(build)=$(boot) $(boot)/$@
zinstall install:
$(Q)$(MAKE) $(build)=$(boot) $@
由此可以发现,arm64的启动镜像为压缩后的Image.gz.</

本文介绍ARM64架构下Linux内核启动镜像的构建流程,包括vmlinux生成、Image创建及压缩等步骤,并详细解析Makefile配置。
最低0.47元/天 解锁文章
65

被折叠的 条评论
为什么被折叠?



