免责声明:我不是 RISC-V 专家。
我一直在尝试使用带半主机的 qemu-system-aarch64 4.1.0 无济于事,直到我发现有人想出了一个修复方法。由于 qemu 系统中对 RISC-V 的半主机支持目前可能无法与为 aarch64 提供的支持相提并论,因此我建议您构建一个 100% 裸机应用程序,同时依赖模拟串行端口进行最少的输入/输出操作。
例如,当使用 siive-u54 作为目标时,ns16550a
地址处有一个 UART 可用0x10000000
:
dd if=/dev/zero of=dummy.bin bs=512 count=1
qemu-system-riscv64 -nographic -serial mon:stdio -machine virt,dumpdtb=qemu-virt-riscv64.dtb -cpu sifive-u54 -bios dummy.bin
dtc -I dtb -O dts qemu-virt-riscv64.dtb > qemu-virt-riscv64.dts
more qemu-virt-riscv64.dts
/dts-v1/;
/ {
#address-cells = <0x02>;
#size-cells = <0x02>;
compatible = "riscv-virtio";
model = "riscv-virtio,qemu";
chosen {
bootargs = [00];
stdout-path = "/uart@10000000";
};
uart@10000000 {
interrupts = <0x0a>;
interrupt-parent = <0x03>;
clock-frequency = <0x384000>;
reg = <0x00 0x10000000 0x00 0x100>;
compatible = "ns16550a";
};