你可以使用gdb来观察最开始的“内核空间到用户空间”的转换。

    1. 请运行make qemu-gdb(如果想以单线程方式,则输入make CPUS=1 qemu-gdb)。
    2. 打开另一个窗口,并在相同的目录下运行gdb(注:这里需要注意调试时需要使用riscv版本的gdb,具体要看自己的系统安装的哪个,如riscv64-linux-gnu-gdb)。
    3. 键入gdb命令break *0x3ffffff10e,这将在内核中的sret指令处设置一个断点,该指令从内核空间跳入用户空间。
    4. 键入gdb命令continue。gdb应当会停留在即将执行sret的断点处。
    5. 键入stepi。gdb现在应当会指示目前在地址为0x0处执行,该地址就是以initcode.S开始的用户空间的起始地址