QEMU执行代码的流程

下面我们来介绍一下QEMU的执行顺序

  1. 第一阶段:由固化在Qemu内的一小段汇编程序负责。将必要的文件加载到物理内存后,PC(程序计数器)会被设置为0x1000,因此Qemu实际运行的第一条指令位于物理地址0x1000,接下来执行几条指令后就跳转到0x80000000(硬编码固化到Qemu中)并进入第二阶段。

  2. 第二阶段:由bootloader负责。我们需要将bootloader(该功能由OpenSBI提供)放到以物理地址0x80000000开头的内存中,并跳转到该处执行。在这一阶段,bootloader负责对计算机进行一些初始化工作,并跳转到内核镜像加载的地址(该地址不固定,可能事先约定好,也可能是动态获取的)。我们选用的OpenSBI则是将下一阶段的入口地址预先约定为0x80200000

  3. 由内核镜像负责。为了正确与第二层对接,我们需要保证内核的第一条指令位于物理地址0x80200000。为此我们需要将内核镜像预先加载到Qemu物理地址的0x80200000开头的区域中。

Last updated