xv6-riscv 开发环境搭建
本文介绍如何搭建 xv6-riscv 的开发环境。
简介
xv6 是 Dennis Ritchie 和 Ken Thompson 的 Unix Version 6 (v6) 的重新实现。xv6 的主要目的是作为 MIT 6.1810 的教学操作系统[1]。
环境
我使用的系统环境:
- Ubuntu 24.04.1 LTS
安装
我们需要安装相关交叉编译工具,以及 QEMU 以模拟 RISC-V 芯片。以下命令修改自 mmikaitis/xv6-tools-container/xv6-tools-container.def[2]。
1 |
|
下载 xv6-riscv
1 |
|
编译和运行
1 |
|
此时看到如下输出,说明编译和运行成功:
1 |
|
要退出 QEMU,可以按下 Ctrl + A
,然后按下 X
。
QEMU 启动后无响应
我在搭建环境的时候遇到了 make qemu
启动后无响应的问题,最终查找到了这个 issue,相关的 PR 提供的解决方案是可用的。
经过我的尝试,将系统和 QEMU 更新到最新版本也可以解决问题。我最终使用的是 Ubuntu 24.04.1 LTS
和 QEMU emulator version 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.2)
。
也可以下载编译安装新版 QEMU[3]。
1 |
|
1 |
|
IDE 远程开发
项目位于远程 Linux 服务器上,如果我们希望在本地使用一个强大的 IDE 进行开发,而不是在服务器使用 vim 等文本编辑器,可以使用 Clion 通过 SSH 连接到服务器进行开发。
连接后即可和本地项目一样进行开发,在 terminal 中执行 make qemu
即可运行 xv6-riscv。
代码分析
由于 Clion 一些奇怪的历史原因,无法良好地识别 Makefile 项目的文件结构。一开始会显示 “This file does not belong to any project target”,在标记目录为 “Project Sources and Headers” 之后,依然无法找到正确的头文件。
要解决该问题,我们只需要创建一个 CMakeLists.txt
文件,骗过 IDE,使其识别项目的文件结构。
1 |
|
请注意 include_directories(.)
,用于将指定目录添加到编译器用于搜索包含文件的目录中。
关闭 Clion 并删除 .idea
目录,然后重新打开项目,选择 “Open as CMake Project”:
远程调试
首先将 GDB 端口映射到本地,添加远程调试配置:
然后运行
1 |
|
启动后会等待,运行刚刚添加的远程调试,程序在断点处停止:
如果需要调试用户程序而不是内核,添加另一个远程调试:
References
- mit-pdos. xv6-riscv. Archived on 2024-07-23. Retrieved 2024-10-15. ↩
- xv6-tools-container.def. 2024-09-07. Archived on 2024-10-06. Retrieved 2024-10-15. ↩
- rovast. qemu-system-riscv64 is not found in package qemu-system-misc. 2022-03-06. Archived on 2024-10-06. Retrieved 2024-10-24. ↩
- Oleksii Chernykh. Pre built Ninja packages. 2024-04-09. Archived on 2024-10-06. Retrieved 2024-10-24. ↩
- Zhang Yuxuan. 【99%环境搭建系列】xv6-riscv内核调试教程. 2022-03-19. Archived on 2024-10-06. Retrieved 2024-10-15. ↩
- 钟万祥. xv6 Remote Debug using CLion. 2019-02-16. Archived on 2024-10-06. Retrieved 2024-10-17. ↩