第零章:实验环境配置¶
+本节我们将完成环境配置并成功运行 rCore-Tutorial 。整个流程分为下面几个部分:
+-
+
OS 环境配置
+Rust 开发环境配置
+Qemu 模拟器安装
+其他工具安装
+试运行 rCore-Tutorial
+
如果你在环境配置中遇到了无法解决的问题,请在本节讨论区留言,我们会尽力提供帮助。
+OS 环境配置¶
+目前,实验主要支持 Ubuntu18.04/20.04 操作系统。使用 Windows10 和 macOS 的读者,可以安装一台 Ubuntu18.04 虚拟机或 Docker +进行实验。
+Windows10 用户可以通过系统内置的 WSL2 虚拟机(请不要使用 WSL1)来安装 Ubuntu 18.04 / 20.04 。读者请自行在互联网上搜索相关安装教程,或 适用于 Linux 的 Windows 子系统安装指南 (Windows 10) 。
+注解
+基于github classroom的开发方式
+基于github classroom,可方便建立开发用的git repository,并可基于github的 codespace (在线版ubuntu +vscode)在线开发使用。整个开发环境仅仅需要一个网络浏览器。
+-
+
在网络浏览器中用自己的 github id 登录 github.com
+接收 第一个实验练习 setup-env-run-os1 的github classroom在线邀请 ,根据提示一路选择OK即可。
+完成第二步后,你的第一个实验练习 setup-env-run-os1 的 github repository 会被自动建立好,点击此github repository的链接,就可看到你要完成的第一个实验了。
+在你的第一个实验练习的网页的中上部可以看到一个醒目的 code 绿色按钮,点击后,可以进一步看到 codespace 标签和醒目的 create codesapce on main 绿色按钮。请点击这个绿色按钮,就可以进入到在线的ubuntu +vscode环境中
+再按照下面的环境安装提示在vscode的 console 中安装配置开发环境:rustc,qemu等工具。
+重要: 在vscode的 console 中执行 make setupclassroom_testX (该命令仅执行一次,X的范围为 1-8)配置githubclassroom 自动评分功能。
+然后就可以基于在线vscode进行开发、运行、提交等完整的实验过程了。
+
上述的3,4,5步不是必须的,你也可以线下本地开发。
+注解
+Docker 开发环境
+感谢 dinghao188 和张汉东老师帮忙配置好的 Docker 开发环境,进入 Docker 开发环境之后不需要任何软件工具链的安装和配置,可以直接将 tutorial 运行起来,目前应该仅支持将 tutorial 运行在 Qemu 模拟器上。
+使用方法如下(以 Ubuntu18.04 为例):
+-
+
通过
su切换到管理员账户root;
+在
rCore-Tutorial根目录下make docker进入到 Docker 环境;
+进入 Docker 之后,会发现当前处于根目录
/,我们通过cd mnt将当前工作路径切换到/mnt目录;
+通过
ls可以发现/mnt目录下的内容和rCore-Tutorial-v3目录下的内容完全相同,接下来就可以在这个环境下运行 tutorial 了。例如cd os && make run。
+
使用 macOS 进行实验理论上也是可行的,但本章节仅介绍 Ubuntu 下的环境配置方案。
+注解
+经初步测试,使用 M1 芯片的 macOS 也可以运行本实验的框架,即我们的实验对平台的要求不是很高。但我们仍建议同学配置 Ubuntu 环境,以避免未知的环境问题。
+Rust 开发环境配置¶
+首先安装 Rust 版本管理器 rustup 和 Rust 包管理器 cargo,可以使用官方安装脚本:
+curl https://sh.rustup.rs -sSf | sh
+如果因网络问题通过命令行下载脚本失败了,可以在浏览器地址栏中输入 https://sh.rustup.rs 将脚本下载到本地运行。或者使用字节跳动提供的镜像源。
+建议将 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 帮助:
+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
+也可以设置科学上网代理:
+# e.g. Shadowsocks 代理,请根据自身配置灵活调整下面的链接
+export https_proxy=http://127.0.0.1:1080
+export http_proxy=http://127.0.0.1:1080
+export ftp_proxy=http://127.0.0.1:1080
+安装中全程选择默认选项即可。
+安装完成后,我们可以重新打开一个终端来让新设置的环境变量生效,也可以手动将环境变量设置应用到当前终端, +只需输入以下命令:
+source $HOME/.cargo/env
+确认一下我们正确安装了 Rust 工具链:
+rustc --version
+最好把 Rust 包管理器 cargo 镜像地址 crates.io 也替换成中国科学技术大学的镜像服务器,来加速三方库的下载。
+打开或新建 ~/.cargo/config 文件,并把内容修改为:
[source.crates-io]
+registry = "https://github.com/rust-lang/crates.io-index"
+replace-with = 'ustc'
+[source.ustc]
+registry = "git://mirrors.ustc.edu.cn/crates.io-index"
+同样,也可以使用tuna源 参见 crates.io 帮助:
+[source.crates-io]
+replace-with = 'tuna'
+
+[source.tuna]
+registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"
+推荐 JetBrains Clion + Rust插件 或者 Visual Studio Code 搭配 rust-analyzer 和 RISC-V Support 插件 进行代码阅读和开发。
+注解
+-
+
JetBrains Clion是付费商业软件,但对于学生和教师,只要在 JetBrains 网站注册账号,可以享受一定期限(半年左右)的免费使用的福利。
+Visual Studio Code 是开源软件。
+当然,采用 VIM,Emacs 等传统的编辑器也是没有问题的。
+
Qemu 模拟器安装¶
+我们需要使用 Qemu 7.0.0 以上版本进行实验,为此,从源码手动编译安装 Qemu 模拟器:
+# 安装编译所需的依赖包
+sudo apt install autoconf automake autotools-dev curl libmpc-dev libmpfr-dev libgmp-dev \
+ gawk build-essential bison flex texinfo gperf libtool patchutils bc \
+ zlib1g-dev libexpat-dev pkg-config libglib2.0-dev libpixman-1-dev git tmux python3 ninja-build
+# 下载源码包
+# 如果下载速度过慢可以使用我们提供的百度网盘链接:https://pan.baidu.com/s/1z-iWIPjxjxbdFS2Qf-NKxQ
+# 提取码 8woe
+wget https://download.qemu.org/qemu-7.0.0.tar.xz
+# 解压
+tar xvJf qemu-7.0.0.tar.xz
+# 编译安装并配置 RISC-V 支持
+cd qemu-7.0.0
+./configure --target-list=riscv64-softmmu,riscv64-linux-user
+make -j$(nproc)
+注解
+注意,上面的依赖包可能并不完全,比如在 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包。
+
另外一些 Linux 发行版编译 Qemu 的依赖包可以从 这里 +找到。请自行选择合适的编译器版本正常编译 Qemu。
+之后我们可以在同目录下 sudo make install 将 Qemu 安装到 /usr/local/bin 目录下,但这样经常会引起
+冲突。个人来说更习惯的做法是,编辑 ~/.bashrc 文件(如果使用的是默认的 bash 终端),在文件的末尾加入
+几行:
# 请注意,qemu-7.0.0 的父目录可以随着你的实际安装位置灵活调整
+export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0
+export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0/riscv64-softmmu
+export PATH=$PATH:/home/shinbokuow/Downloads/built/qemu-7.0.0/riscv64-linux-user
+随后即可在当前终端 source ~/.bashrc 更新系统路径,或者直接重启一个新的终端。
确认 Qemu 的版本:
+qemu-system-riscv64 --version
+qemu-riscv64 --version
+试运行 rCore-Tutorial¶
+$ git clone https://github.com/LearningOS/rust-based-os-comp2022.git
+$ cd rust-based-os-comp2022
+$ make setupclassroom //注意:这一步很重要,是用于github classroom自动评测你的工作。这一步只需在首次克隆项目仓库时执行一次,以后一般就不用执行了,除非 .github/workflows/classroom.yml发生了变化。
+我们先运行不需要处理用户代码的裸机操作系统 os1 :
cd os1
+LOG=DEBUG make run
+如果你的环境配置正确,你应当会看到如下输出:
+[rustsbi] RustSBI version 0.2.2, adapting to RISC-V SBI v1.0.0
+.______ __ __ _______.___________. _______..______ __
+| _ \ | | | | / | | / || _ \ | |
+| |_) | | | | | | (----`---| |----`| (----`| |_) || |
+| / | | | | \ \ | | \ \ | _ < | |
+| |\ \----.| `--' |.----) | | | .----) | | |_) || |
+| _| `._____| \______/ |_______/ |__| |_______/ |______/ |__|
+[rustsbi] Implementation : RustSBI-QEMU Version 0.1.1
+[rustsbi] Platform Name : riscv-virtio,qemu
+[rustsbi] Platform SMP : 1
+[rustsbi] Platform Memory : 0x80000000..0x88000000
+[rustsbi] Boot HART : 0
+[rustsbi] Device Tree Region : 0x87000000..0x87000ef2
+[rustsbi] Firmware Address : 0x80000000
+[rustsbi] Supervisor Address : 0x80200000
+[rustsbi] pmp01: 0x00000000..0x80000000 (-wr)
+[rustsbi] pmp02: 0x80000000..0x80200000 (---)
+[rustsbi] pmp03: 0x80200000..0x88000000 (xwr)
+Hello, world!
+[DEBUG] .rodata [0x80203000, 0x80205000)
+[ INFO] .data [0x80205000, 0x80206000)
+[ WARN] boot_stack [0x80206000, 0x80216000)
+[ERROR] .bss [0x80216000, 0x80217000)
+Panicked at src/main.rs:48 Shutdown machine!
+通常 rCore 会自动关闭 Qemu 。如果在某些情况下需要强制结束,可以先按下 Ctrl+A ,再按下 X 来退出 Qemu。
注意
+请务必执行 make run,这将为你安装一些上文没有提及的 Rust 包依赖。
如果卡在了
+Updating git repository `https://github.com/rcore-os/riscv`
+请通过更换 hosts 等方式解决科学上网问题,或者将 riscv 项目下载到本地,并修改 os/Cargo.toml 中的 riscv 包依赖路径
+[dependencies]
+riscv = { path = "YOUR riscv PATH", features = ["inline-asm"] }
+恭喜你完成了实验环境的配置,可以开始阅读教程的正文部分了!
+GDB 调试支持*¶
+注意
+使用 GDB debug 并不是必须的,你可以暂时跳过本小节。
+在 os 目录下 make debug 可以调试我们的内核,这需要安装终端复用工具 tmux ,还需要基于 riscv64 平台的 gdb 调试器 riscv64-unknown-elf-gdb 。该调试器包含在 riscv64 gcc 工具链中,工具链的预编译版本可以在如下链接处下载:
-
+
- +
- +
- +
- +
解压后在 bin 目录下即可找到 riscv64-unknown-elf-gdb 以及另外一些常用工具 objcopy/objdump/readelf 等。