【发布时间】:2023-03-10 10:17:01
【问题描述】:
出于爱好/学习目的,我正在考虑创建自己的操作系统。
我创建了一个简单的 rust 程序,但无法使用 QEMU 启动它。我的 rust 代码如下所示。
#![no_std]
#![no_main]
mod panic;
#[no_mangle]
pub extern "C" fn _start() -> ! {
loop{}
}
我正在将其编译为以下格式。
riscv64gc-unknown-none-elf
并尝试使用此命令在 QEMU 中运行它
qemu-system-riscv64 -M virt -bios none -kernel
这将启动 QEMU,但调试工具在内存中没有显示任何内容。
我可以看到它不在内存中的正确位置,因此我将以下参数添加到链接器,以便将其加载到正确的位置(内存开头)。
--image-base=0x80000000
我可以看到它现在位于正确的位置,但不会执行任何操作,因为在 0x80000000 的起始地址处没有有效代码,因为 elf 标头是那里的第一件事。
我的印象是QEMU能够读取elf文件并跳转到header中指定的入口地址。这不是真的还是我只是错过了什么?
【问题讨论】: