You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在QEMU sifive_e实现从启动到UART0输出的裸机RISC-V程序及疑问

RISC-V裸机启动与QEMU仿真相关疑问

我希望深入了解简单RISC-V计算机的启动流程,无需涉及完整操作系统,仅需掌握从开机到运行裸机程序向UART设备输出数据的过程。因启动流程与硬件相关,我选择SiFive HiFive1 RevB开发板,它成本较低且可通过QEMU的sifive_e机器进行仿真。

我的目标是理解启动流程中的所有代码,尤其对Firmware、Bootloader、QEMU的-bios和-kernel参数的作用存在疑惑。预期成果是编写一个能向UART0输出"Hello World"后停机的RISC-V汇编程序,且不使用高级语言、工具链及链接器。

我已在QEMU virt机器上实现该程序,通过Python脚本生成二进制文件test.bin,经objdump反汇编可见其逻辑为生成virt机器的UART0地址0x10000000并写入"Hello World"的每个字节,可通过qemu-system-riscv32 -nographic -machine virt -bios test.bin或-kernel参数运行,但产生不同现象。

具体疑问

  1. 使用-bios test.bin时,我的代码是否为CPU启动后运行的第一段代码?是否存在BIOS之前的固件阶段?QEMU virt机器的默认BIOS有何作用?
  2. 将代码移植到sifive_e机器时,仅修改UART0地址为0x10013000后运行无输出且挂起,缺少哪些必要步骤?何处可获取sifive_e的启动流程文档?QEMU sifive_e的启动流程是否与HiFive1 RevB板一致?

内容的提问来源于stack exchange,提问作者statusfailed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:40:20