3.自制操作系统: risc-v qemu virt board debug

404 阅读1分钟

根据上一篇文章的步骤,可以在终端输出"hello world"

现在我们使用工具gdb-multiarch单步调试程序

安装

sudo apt install gdb-multiarch

编译

$ make
rm -rf build *.img kernel.map
mkdir -p build
riscv64-linux-gnu-gcc -g -Wall -nostdlib  -Iinclude  -MMD -c src/start.c -o build/start_c.o
riscv64-linux-gnu-gcc -g -Iinclude  -MMD -c -D__ASSEMBLY__ src/startup.S -o build/startup_s.o
riscv64-linux-gnu-ld -T src/linker.ld -Map kernel.map -o build/kernel.elf  build/start_c.o build/startup_s.o
riscv64-linux-gnu-objcopy build/kernel.elf -O binary kernel.img

enter debug mode

另外打开一个终端,进入代码目录

cd risc-v-bm/

进入调试模式

$ gdb-multiarch --tui ./build/kernel.elf

连接

(gdb) target remote :1234

打上断点 b _start

(gdb) b _start
Breakpoint 1 at 0x80000000: file src/startup.S, line 5.

继续执行 continue

(gdb) continue
Continuing.
Breakpoint 1, _text_boot () at src/startup.S:5

Image.png 显示所有regs

(gdb) layout regs

Image.png 现在就是可以使用step命令单步查看每个寄存器的变化

由于上面寄存器没有显示完整,

可以使用命令 i r regs_name来查看某个寄存器的值。

(gdb) i r s4
s4             0x72     114
(gdb) i r s2
s2             0x80001009       2147487753

i r 则显示所有寄存器的值