参考博客
linux4.15 arm qemu @ubuntu18.04环境搭建_papaofdoudou的博客-优快云博客
问题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的关系,可以表示如下:

至此,可执行程序的结构布局解释的通了,此图的简要版本如下图所示:


本文探讨了QEMU启动ARM虚拟机时的BOOTROM过程,解答了启动命令、启动流程以及QEMU如何灌入BOOTROM指令的问题。通过分析启动命令和内核加载地址,揭示了Linux和RT-THREAD在QEMU中的不同启动行为,并指出QEMU对CPU和IO行为的模拟机制。
最低0.47元/天 解锁文章
1万+

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



