在RISC-V开发板上开发自己的操作系统

操作系统开发step0环境搭建

环境搭建

  • 实验平台:ubuntu

  • 代码运行环境:qemu 7.0

  • rust开发环境:RustRover(vim)/Clion

Rust 开发环境配置

首先安装 Rust 版本管理器 rustup 和 Rust 包管理器 cargo,这里我们用官方的安装脚本来安装:

curl https://sh.rustup.rs -sSf | sh

如果通过官方的脚本下载失败了,可以在浏览器的地址栏中输入 https://sh.rustup.rsarrow-up-right 来下载脚本,在本地运行即可。

如果官方的脚本在运行时出现了网络速度较慢的问题,可选地可以通过修改 rustup 的镜像地址(修改为中国科学技术大学的镜像服务器)来加速:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
curl https://sh.rustup.rs -sSf | sh

或者使用tuna源来加速 参见 rustup 帮助arrow-up-right

export RUSTUP_DIST_SERVER=https://mirrors.tuna.edu.cn/rustup
export RUSTUP_UPDATE_ROOT=https://mirrors.tuna.edu.cn/rustup/rustup
curl https://sh.rustup.rs -sSf | sh

或者也可以通过在运行前设置命令行中的科学上网代理来实现:

安装完成后,我们可以重新打开一个终端来让之前设置的环境变量生效。我们也可以手动将环境变量设置应用到当前终端,只需要输入以下命令:

接下来,我们可以确认一下我们正确安装了 Rust 工具链:

可以看到当前安装的工具链的版本。

警告

目前用于操作系统实验开发的 rustc 编译器的版本不局限在 1.77.0 这样的数字上,你可以选择更新版本的 rustc 编译器。但注意只能用 rustc 的 nightly 类型的版本。

可通过如下命令安装 rustc 的 nightly 版本,并把该版本设置为 rustc 的缺省版本。

我们最好把软件包管理器 cargo 所用的软件包镜像地址 crates.io 也换成中国科学技术大学的镜像服务器来加速三方库的下载。我们打开(如果没有就新建) ~/.cargo/config 文件,并把内容修改为:

同样,也可以使用tuna源 参见 crates.io 帮助arrow-up-right

接下来安装一些Rust相关的软件包

警告

如果你换了另外一个rustc编译器(必须是nightly版的),需要重新安装上述rustc所需软件包。

至于 Rust 开发环境,推荐RustRover或者 JetBrains Clion + Rust插件 或者 Visual Studio Code 搭配 rust-analyzer 和 RISC-V Support 插件。

注解

  • JetBrains Clion是付费商业软件,但对于学生和教师,只要在 JetBrains 网站注册账号,可以享受一定期限(半年左右)的免费使用的福利。

  • Visual Studio Code 是开源软件,不用付费就可使用。

  • 当然,采用 VIM,Emacs 等传统的编辑器也是没有问题的。

QEMU 模拟器安装

我们需要使用 QEMU 7.0 版本进行实验,低版本的 QEMU 可能导致框架代码不能正常运行。高版本的qemu需要更换rustsbi,后续会出文章。因此我们需要从源码手动编译安装 QEMU 模拟器软件。下面以 Ubuntu 24.04 LTS上的安装流程为例进行说明:

首先我们安装依赖包,获取 QEMU 源代码并手动编译:

注意,上面的依赖包可能并不完全,比如在 Ubuntu 18.04 上:

  • 出现 ERROR: pkg-config binary 'pkg-config' not found 时,可以安装 pkg-config 包;

  • 出现 ERROR: glib-2.48 gthread-2.0 is required to compile QEMU 时,可以安装 libglib2.0-dev 包;

  • 出现 ERROR: pixman >= 0.21.8 not present 时,可以安装 libpixman-1-dev 包。

之后我们可以在同目录下 sudo make install 将 QEMU 安装到 /usr/local/bin 目录下,但这样经常会引起冲突。个人来说更习惯的做法是,编辑 ~/.bashrc 文件(如果使用的是默认的 bash 终端),在文件的末尾加入几行:

随后即可在当前终端 source ~/.bashrc 更新系统路径,或者直接重启一个新的终端。

此时我们可以确认 QEMU 的版本:

在其他缺少预编译 QEMU with RV64 软件包的Linux x86-64 环境(如openEuler操作系统)上,首先需要从 openEuler 社区维护的 QEMU 的 riscv分支arrow-up-right 下载 QEMU 源码,并直接通过 rpmbuild 进行构建。

警告

请尽量不要安装 qemu-kvm ,这可能会导致我们的框架无法正常运行。如果已经安装,可以考虑换用 Docker 。

另外,我们仅在 Qemu 7.0.0 版本上进行了测试,请尽量不要切换到其他版本。

RISC-V k210开发板开发环境搭建

安装kflash

让我们确保 kflash 的路径被添加到 PATH 中。以 root 权限运行:

每次使用kflash请使用完整路径,比如

注:请确保使用root权限安装kflash,否则后续会出错。

尝试一下烧录运行我们已经写好的一个bare mental app

file-download
136KB

这样就成功了,退出请按ctrl+]

Last updated