Я изучаю версию 2019 MIT 6.828 / 6.S081: Разработка операционной системы .
Я пытался подключить GDB к xv6, работающему на RIS C -V, используя QEMU, чтобы узнать, что происходит, когда происходит переключение контекста между пользовательским режимом и режимом ядра.
После делая make qemu-gdb
и gdb
в одном каталоге, моя GDB успешно подключилась к QEMU. Однако:
(gdb) x/2i $pc
=> 0xd8c: ecall
0xd90: ret
Проблема в следующем: Теперь, если я stepi
, он «перепрыгивает» на 0xd90
вместо того, чтобы войти в пространство ядра.
Кроме того, доступ к любым адресам ядра не разрешен, как если бы я отлаживал обычную пользовательскую программу:
(gdb) i r stvec
stvec 0x3ffffff000 274877902848
(gdb) x/i $stvec
0x3ffffff000: Cannot access memory at address 0x3ffffff000
Среда:
Узел VM: Manjaro 19.0.2
sudo pacman -Syy
sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux-gnu-gcc riscv64-linux-gnu-gdb qemu-arch-extra
GDB: 9.1
QEMU: 4.2.0
G CC : 9.2.0
Очень ценю, что кто-нибудь может поделиться некоторым пониманием того, что здесь происходит. Большое спасибо!