uImage镜像文件
1.进入linux内核源码目录
ubuntu@ubuntu:~$ cd FSMP1A/linux-stm32mp-5.10.61-stm32mp-r2-r0/linux-5.10.61/
打开Makefile文件
vi Makefile
搜索include
因为 $(SRCARCH)->arm
所以上述指令为 arch/arm/Makefile
2.进入linux内核源码目录下,arch/arm目录下,打开Makefile文件,搜索:uImage
通过分析可知:
make -f ./scripts/Makefile.build obj=arch/arm/boot(目录) MACHINE= arch/arm/boot/uImage(目标)
3.进入linux内核源码目录下,scripts目录下,打开Makefile.build文件
src := $(obj) ——arch/arm/boot
kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src)) ——kbuild-dir := arch/arm/boot
kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)
kbuild-file := arch/arm/boot/Kbuild 和arch/arm/boot/Makefile
include $(kbuild-file) ——将arch/arm/boot/目录下的Makefile进行展开,替换到当前目录下的这个位置(达到Makefile中转)
4.进入linux内核源码目录下,arch/arm/boot目录下,打开Makefile文件,搜索uImage
5.进入linux内核源码目录下,scripts目录下,打开Kbuild.include文件,搜索if_changed
其中:$(cmd_$(1)) :调用了 cmd_uimage
6.继续在当前目录下,打开Makefile.lib文件,搜索cmd_uimage功能
$(BASH) :bash
MKIMAGE := 内核源码目录下/scripts/mkuboot.sh
通过分析mkuboot.sh脚本文件可知,执行mkimage命令
mkimage -A arm -O linux -C gzip -T kernel -a 0xc2000000 -e 0xc2000000 -n uImage -d zImage uImage
7.总结:uImage是通过zImage得到,将 zImage 通过 mkimage 这个工具添加64字节头部信息
zImage镜像文件
1.进入arch/arm/boot目录下,打开Makefile文件,搜索zImage
$(call if_changed,objcopy) ——执行cmd_objcopy
2.进入scripts目录下,打开Makefile.lib文件,搜索cmd_objcopy功能
arm-linux-gnueabihf-objcopy arch/arm/boot/compressed/vmlinux arch/arm/boot/zImage
3.zImage镜像文件和arch/arm/boot/compressed/vmlinux之间关系
arch/arm/boot/compressed/vmlinux通过objcopy命令格式化转换为zImage
$(obj)/compressed/vmlinux镜像文件
1.进入arch/arm/boot目录下,打开Makefile文件,搜索vmlinux
执行命令:
make -f ./scripts/Makefile.build obj=arch/arm/boot/compressed arch/arm/boot/compressed/vmlinux
2.进入arch/arm/boot/compressed目录下,打开Makefile文件,搜索vmlinux
将所有的.o文件通过ld命令,根据vmlinux.lds链接脚本文件,链接生成vmlinux
$(call if_changed,gzip) ——执行cmd_gzip
3.进入scripts目录下,打开Makefile.lib文件,搜索cmd_gzip功能
4.arch/arm/boot/compressed/vmlinux镜像文件和Image之间关系
将Image镜像gzip压缩方式得到arch/arm/boot/compressed/vmlinux镜像文件
Image镜像文件
1.进入arch/arm/boot目录下,打开Makefile文件,搜索Image
$(call if_changed,objcopy) ——执行cmd_objcopy
2.进入scripts目录下,打开Makefile.lib文件,搜索cmd_objcopy功能
3.Image和vmlinux之间关系
vmlinux通过objcopy命令格式化转换为Image