无法在 QEMU 中写入 riscv64 satp 寄存器

问题描述 投票:0回答:0

我正在尝试运行我在 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
在网上搜索,好像没有这方面的东西

谁能告诉我我应该为此做什么?

谢谢!

qemu riscv
© www.soinside.com 2019 - 2024. All rights reserved.