我正在尝试运行我在 QEMU 上实现的 RISCV 操作系统内核,但在初始化虚拟内存后,QEMU 似乎挂起。调试后,程序停在
csrw satp, a5
语句,无法执行下一条语句,gdb-multiarch崩溃。 a5
的值为 0x8000000000087fff
.
我使用 Ubuntu 22.04.2 作为我的编程平台。 QEMU版本为7.2.0,gdb-multiarch版本为Ubuntu 12.1-0ubuntu1~22.04,QEMU运行方式如下:
qemu-system-riscv64 -machine virt -bios default -m 128M -nographic -kernel mykernel
我也试过在我的内核开头运行这条语句,比如
.section entry_section, "ax"
.global _entry
.type _entry, @function
_entry:
li a5, 0x8000000000087fff
sfence.vma
csrw satp, a5
sfence.vma
spin:
j spin
并得到相同的结果。
0x0000000080200008 in _entry ()----- Backtrace -----
0x000000008020000a in _entry () 0x55a303d70197 ???
0x000000008020000c in _entry () 0x55a303e72599 ???
0x0000000080200010 in _entry () 0x55a303e72762 ???200014 in _entry ()
0x7f56b127d51f ???
./signal/../sysdeps/unix/sysv/linux/x86_64/libc_sigaction.c:0
0x55a30414e5b5 ???
0x55a30414eb7b ???
0x55a30414ec88 ???
0x55a30415e088 ???
0x55a30414f8a1 ???
0x55a303e72eb1 ???
0x55a303ee4d14 ???
0x55a303ef5d11 ???
0x55a3040ab9ad ???
0x55a3044d4395 ???
0x55a3044d482a ???
0x55a303f3e71c ???
0x55a303f40404 ???
0x55a303c9a0ef ???
0x7f56b1264d8f __libc_start_call_main
../sysdeps/nptl/libc_start_call_main.h:58
0x7f56b1264e3f __libc_start_main_impl
../csu/libc-start.c:392
0x55a303c9fe24 ???
0xffffffffffffffff ???
---------------------
A fatal error internal to GDB has been detected, further
debugging is not possible. GDB will now terminate.
This is a bug, please report it. For instructions, see:
<https://www.gnu.org/software/gdb/bugs/>.
[1] 12858 segmentation fault (core dumped) gdb-multiarch
我用关键字
cannot write satp
在网上搜索,好像没有这方面的东西
谁能告诉我我应该为此做什么?
谢谢!