xv6 资料汇总&环境搭建&调试

388 阅读2分钟

官方课程资源:6.S081/2023/schedule

视频教程:MIT 公开课 MIT6.S081精译

视频教程的文字版:GitHub - huihongxiao/MIT6.S081 或者 网页阅读

中文资料: CS自学指南-6.S081

可参考的其他资料:

B站LAB视频LAB视频对应的笔记

fanxiao's blog

好的RISCV的资料网站: five-embeddev

环境搭建

参考网址

主要包括编译工具链,qemu,gdb以及依赖的各种工具库。

gdb-multiarch无法单步调试ecall进入内核,这个问题没有找到解决办法。

于是自己编译安装riscv64-unknown-elf-gdb参考1参考2

如果自己安装工具链, 过程参考6.S081/2023/tools汪辰老师的博客或者这个博客

环境测试:

在工程主目录下,执行make qemu开始编译代码,并开始运行qemu,进入xv6的命令行。Ctrl A+X可退出xv6的命令行。

make qemu-gdb,并在另一个窗口(也需要在工程主目录下),执行riscv64-unknown-elf-gdb,可使用GDB调试xv6的代码。工程主目录下,有.gdbinit的文件,启动GDB时,会自动执行该脚本中的命令,比如加载被调试文件的命令。

运行xv6

运行 xv6:在 xv6-riscv 目录下,输入 make qemu

退出xv6

如果你想退出 xv6,有两种方式可以实现:

  1. 直接终止 QEMU 进程

    • 按下 Ctrl + a,然后再按下 x。这将直接终止 QEMU 进程,并将你带回到 shell 界面。
  2. 先回到QEMU的console界面,然后再退出

    • 按下 Ctrl + a,然后再按下 c。这将退出 xv6 的 shell 界面,进入 QEMU 的监视器界面。
    • 在监视器界面中,输入 q 并按回车键,即可完全退出 QEMU

QEMU的console界面

  • 进入: 按下 Ctrl + a,然后再按下 c。这将退出 xv6 的 shell 界面,进入 QEMU 的监视器界面。

  • 返回 xv6 的 shell 界面:QEMU 的监视器界面按下,Ctrl + a,然后再按下 c。可返回 xv6 的 shell 界面。

console界面的常用命令:

  • info mem 查看页表。

调试xv6

  • 在 xv6-riscv 目录下执行 make qemu-gdb,进程会阻塞。
  • 另开一个终端,在 xv6-riscv 目录下执行 riscv64-unknown-elf-gdb
  • 如果出现 .gdbinit 相关的错误,将 add-auto-load-safe-path /home/xxx/xv6-riscv/.gdbinit 添加到 /home/xxx/.gdbinit 文件中。xv6-riscv 下,有.gdbinit 的文件,启动GDB时,会自动执行该脚本中的命令,比如加载被调试文件的命令。
  • 如果调试用户态程序,则需要再手动加载用户态程序。如:在lab4中,需要调试call.c,启动gdb后,需要执行file user/_call