参考博客
linux4.15 arm qemu @ubuntu18.04环境搭建_papaofdoudou的博客-CSDN博客
问题1:针对启动命令
qemu-system-arm -M vexpress-a9 -m 1024M -kernel arch/arm/boot/zImage -append "rdinit=/linuxrc console=ttyAMA0 loglevel=8" -dtb arch/arm/boot/dts/vexpress-v2p-ca9.dtb -nographic
的启动流程是怎样的?
回答:命令行启动的是zImage,而zImage的来源是arm/boot下的zImage,zImage包含压缩的内和和自解压程序
通过makefile可以知道zImage的来源是vmlinux经过objcopy得到:
要注意这个vmlinux并非是顶层目录那个内核ELF文件的vmlinux,两个名字文件相同,但是差别巨大,首先它们的生成方式就是不同的,简单来说,内在编译zImage目标的过程中实际上产生了两个vmlinux,分别是内核压缩目录的vmlinux和源码顶层目录的vmlinux,压缩目录的vmlinux包含了内核顶层的vmliunx压缩文件和壳解压程序,虽然它们都是ELF格式,但是前者相当于一级火箭,首先点火,解压内部的vmlinux,拷贝到对应的物理地址后,后者作为二级火箭完成内核启动系统。
关于linux vmlinux,zImage vmlinux, Image以及zImage的关系,可以表示如下:
至此,可执行程序的结构布局解释的通了,此图的简要版本如下图所示: