linux 内核编译后,标准输出件是内核源码根目录下的vmlinux。
其它各种格式的镜像文件都这个这个转化出来的。
通常看内核的编译配置,比如arm64的,有时在arch\arm64\boot里面会生成Image和zImage。
Image的来源(使用交叉工具链):
aarch64-xxx-objcopy -O binary -R .note -R .comment -S vmlinux Image
zImage是由Image压缩而来,里面的内容说明参考:
https://www.cnblogs.com/genshu123/p/11210990.htmlhttps://www.cnblogs.com/genshu123/p/11210990.html
“zImage由head.o,piggy.gzip.o,misc等链接组成,piggy.gzip.o中包含压缩的内核镜像”
总结就是zImage就是添加了头,实现内核自解压的镜像。
uboot里面LINUX_ZIMAGE_MAGIC这个宏是确定能否支持?
比如:
vmlinux是120M,那Image大概在16M,zImage在3M左右。
注意arm64一般不能自解压,不能使用zImage,需要对应CPU实现自解压或者使用uboot等先解压为Image后,跳转启动。
参考内核自带说明:
Documentation\arm64\booting.txt
The AArch64 kernel does not currently provide a decompressor and
therefore requires decompression (gzip etc.) to be performed by the boot
loader if a compressed Image target (e.g. Image.gz) is used. For
bootloaders that do not implement this requirement, the uncompressed
Image target is available instead.
uImage只是将各种镜像,用mkimage打上了个说明的头,给uboot加载启动内核使用的。
具体怎么使用参考uboot源码中的说明文件:
doc\uImage.FIT
参考已有的指导说明:
https://blog.csdn.net/boyemachao/article/details/109447927
建议还是使用
mkimage -f linux_arm32.its linux.itb,这种方式,实现多个内核,多个dtb,多个initrd的灵活组合使用。
后面想到再补充吧。