diff --git a/source/chapter0/5setup-devel-env.rst b/source/chapter0/5setup-devel-env.rst index e82195f2..2b4ffb86 100644 --- a/source/chapter0/5setup-devel-env.rst +++ b/source/chapter0/5setup-devel-env.rst @@ -16,11 +16,9 @@ 系统环境配置 ------------------------------- -目前实验内容可支持在 Ubuntu18.04 / 20.04 + 操作系统、CentOS、openEuler等操作系统上进行操作。对于 Windows10/11 和 macOS 上的用户,可以使用 VMware Workstation 或 -VirtualBox 等相关软件,通过虚拟机方式安装 Ubuntu18.04 / 20.04、CentOS、openEuler操作系统,并在上面进行实验。 +目前实验内容可支持在 Ubuntu18.04 / 20.04 + 操作系统、CentOS、openEuler等操作系统上进行操作。对于 Windows10/11 和 macOS 上的用户,可以使用 VMware Workstation 或 VirtualBox 等相关软件,通过虚拟机方式安装 Ubuntu18.04 / 20.04、CentOS、openEuler操作系统,并在上面进行实验。 -对于Windows10/11 的用户可以通过系统内置的 WSL2 虚拟机(请不要使用 WSL1)来安装 Ubuntu 18.04 / 20.04 。 -步骤如下: +对于Windows10/11 的用户可以通过系统内置的 WSL2 虚拟机(请不要使用 WSL1)来安装 Ubuntu 18.04 / 20.04 。步骤如下: - 升级 Windows 10/11 到最新版(Windows 10 版本 18917 或以后的内部版本)。注意,如果 不是 Windows 10/11 专业版,可能需要手动更新,在微软官网上下载。升级之后, @@ -46,12 +44,7 @@ VirtualBox 等相关软件,通过虚拟机方式安装 Ubuntu18.04 / 20.04、C - `下载 Linux 内核安装包 `_ - 在微软商店(Microsoft Store)中搜索并安装 Ubuntu18.04 / 20.04。 -如果你打算使用 VMware 安装虚拟机的话,我们已经配置好了一个能直接运行 rCore-Tutorial-v3 的 -Ubuntu18.04 镜像,它是一个 ``vmdk`` 格式的虚拟磁盘文件,只需要在 VMware 中新建一台虚拟机, -在设置虚拟磁盘的时候选择它即可。`百度网盘链接 `_ (提取码 x5mf ) -或者 `清华云盘链接 `_ 。 -已经创建好用户 oslab ,密码为一个空格。它已经安装了中文输入法和 Markdown 编辑器 Typora 还有作为 Rust 集成开发环境的 -Visual Studio Code,能够更容易完成实验并撰写实验报告。 +如果你打算使用 VMware 安装虚拟机的话,我们已经配置好了一个能直接运行 rCore-Tutorial-v3 的 Ubuntu18.04 镜像,它是一个 ``vmdk`` 格式的虚拟磁盘文件,只需要在 VMware 中新建一台虚拟机,在设置虚拟磁盘的时候选择它即可。`百度网盘链接 `_ (提取码 x5mf )或者 `清华云盘链接 `_ 。已经创建好用户 oslab ,密码为一个空格。它已经安装了中文输入法和 Markdown 编辑器 Typora 还有作为 Rust 集成开发环境的 Visual Studio Code,能够更容易完成实验并撰写实验报告。如果想要使用 VMWare 安装 openEuler 虚拟机的话,可以在 `openEuler官网 `_ 下载 ISO 自行安装,接着需要参考网络上的一些教程配置网络和安装图形界面。 .. _link-docker-env: @@ -69,9 +62,7 @@ Visual Studio Code,能够更容易完成实验并撰写实验报告。 4. 通过 ``ls`` 可以发现 ``/mnt`` 目录下的内容和 ``rCore-Tutorial-v3`` 目录下的内容完全相同,接下来就可以在这个环境下运行 tutorial 了。例如 ``cd os && make run`` 。 -你也可以在 Windows10/11 或 macOS 原生系统或者其他 Linux 发行版上进行实验,基本上不会出现太大的问题。不过由于 -时间问题我们主要在 Ubuntu18.04 上进行了测试,后面的配置也都是基于它的。如果遇到了问题的话,请在本节的讨论区 -中留言,我们会尽量帮助解决。 +你也可以在 Windows10/11 或 macOS 原生系统或者其他 Linux 发行版上进行实验,基本上不会出现太大的问题。不过由于时间问题我们主要在 Ubuntu18.04 上进行了测试,后面的配置也都是基于它的。如果遇到了问题的话,请在本节的讨论区中留言,我们会尽量帮助解决。 Rust 开发环境配置 ------------------------------------------- @@ -84,8 +75,7 @@ Rust 开发环境配置 如果通过官方的脚本下载失败了,可以在浏览器的地址栏中输入 ``_ 来下载脚本,在本地运行即可。 -如果官方的脚本在运行时出现了网络速度较慢的问题,可选地可以通过修改 rustup 的镜像地址 -(修改为中国科学技术大学的镜像服务器)来加速: +如果官方的脚本在运行时出现了网络速度较慢的问题,可选地可以通过修改 rustup 的镜像地址(修改为中国科学技术大学的镜像服务器)来加速: .. code-block:: bash @@ -110,8 +100,7 @@ Rust 开发环境配置 export http_proxy=http://127.0.0.1:1080 export ftp_proxy=http://127.0.0.1:1080 -安装完成后,我们可以重新打开一个终端来让之前设置的环境变量生效。我们也可以手动将环境变量设置应用到当前终端, -只需要输入以下命令: +安装完成后,我们可以重新打开一个终端来让之前设置的环境变量生效。我们也可以手动将环境变量设置应用到当前终端,只需要输入以下命令: .. code-block:: bash @@ -141,8 +130,7 @@ Rust 开发环境配置 rustup default nightly -我们最好把软件包管理器 cargo 所用的软件包镜像地址 crates.io 也换成中国科学技术大学的镜像服务器来加速三方库的下载。 -我们打开(如果没有就新建) ``~/.cargo/config`` 文件,并把内容修改为: +我们最好把软件包管理器 cargo 所用的软件包镜像地址 crates.io 也换成中国科学技术大学的镜像服务器来加速三方库的下载。我们打开(如果没有就新建) ``~/.cargo/config`` 文件,并把内容修改为: .. code-block:: toml @@ -172,8 +160,7 @@ Rust 开发环境配置 rustup component add rust-src .. warning:: - 如果你换了另外一个rustc编译器(必须是nightly版的),需要重新安装上述rustc所需软件包。 - rCore-Tutorial 仓库中的 ``Makefile`` 包含了这些工具的安装,如果你使用 ``make run`` 也可以不手动安装。 + 如果你换了另外一个rustc编译器(必须是nightly版的),需要重新安装上述rustc所需软件包。rCore-Tutorial 仓库中的 ``Makefile`` 包含了这些工具的安装,如果你使用 ``make run`` 也可以不手动安装。 至于 Rust 开发环境,推荐 JetBrains Clion + Rust插件 或者 Visual Studio Code 搭配 rust-analyzer 和 RISC-V Support 插件。 @@ -186,8 +173,7 @@ Rust 开发环境配置 Qemu 模拟器安装 ---------------------------------------- -我们需要使用 Qemu 5.0.0 版本进行实验,而很多 Linux 发行版的软件包管理器默认软件源中的 Qemu 版本过低,因此 -我们需要从源码手动编译安装 Qemu 模拟器。 +我们需要使用 Qemu 5.0.0 版本进行实验,而很多 Linux 发行版的软件包管理器默认软件源中的 Qemu 版本过低,因此我们需要从源码手动编译安装 Qemu 模拟器。下面以 Ubuntu 18.04 平台上的安装流程为例进行说明: .. warning:: @@ -222,12 +208,9 @@ Qemu 模拟器安装 ``libglib2.0-dev`` 包; - 出现 ``ERROR: pixman >= 0.21.8 not present`` 时,可以安装 ``libpixman-1-dev`` 包。 - 另外一些 Linux 发行版编译 Qemu 的依赖包可以从 `这里 `_ - 找到。 + 另外一些 Linux 发行版编译 Qemu 的依赖包可以从 `这里 `_ 找到。 -之后我们可以在同目录下 ``sudo make install`` 将 Qemu 安装到 ``/usr/local/bin`` 目录下,但这样经常会引起 -冲突。个人来说更习惯的做法是,编辑 ``~/.bashrc`` 文件(如果使用的是默认的 ``bash`` 终端),在文件的末尾加入 -几行: +之后我们可以在同目录下 ``sudo make install`` 将 Qemu 安装到 ``/usr/local/bin`` 目录下,但这样经常会引起冲突。个人来说更习惯的做法是,编辑 ``~/.bashrc`` 文件(如果使用的是默认的 ``bash`` 终端),在文件的末尾加入几行: .. code-block:: bash @@ -245,6 +228,8 @@ Qemu 模拟器安装 qemu-system-riscv64 --version qemu-riscv64 --version +若要在 openEuler 上安装 Qemu,首先需要从 openEuler 社区维护的 Qemu 的 `riscv分支 `_ 下载 Qemu 源码,并直接通过 rpmbuild 进行构建。 + K210 真机串口通信 ------------------------------ @@ -267,6 +252,8 @@ GDB 调试支持 解压后在 ``bin`` 目录下即可找到 ``riscv64-unknown-elf-gdb`` 以及另外一些常用工具 ``objcopy/objdump/readelf`` 等。 +在 openEuler 平台上,则需要 clone `riscv 工具链仓库 `_ 并参考其说明手动构建。 + 运行 rCore-Tutorial-v3 ------------------------------------------------------------ diff --git a/source/chapter1/5support-func-call.rst b/source/chapter1/5support-func-call.rst index ecb608da..876c49e3 100644 --- a/source/chapter1/5support-func-call.rst +++ b/source/chapter1/5support-func-call.rst @@ -72,7 +72,7 @@ .. _term-pseudo-instruction: -从中可以看出,这两条指令在设置 pc 寄存器完成跳转功能之前,还将当前跳转指令的下一条指令地址保存在 rd 寄存器中,即 :math:`\text{rd}\leftarrow\text{pc}+4` 这条指令的含义。(这里假设所有指令的长度均为 4 字节)在 RISC-V 架构中,通常使用 ``ra`` 寄存器(即 ``x1`` 寄存器)作为其中的 ``rd`` 对应的具体寄存器,因此在函数返回的时候,只需跳转回 ``ra`` 所保存的地址即可。事实上在函数返回的时候我们常常使用一条**伪指令** (Pseudo Instruction) 跳转回调用之前的位置: ``ret`` 。它会被汇编器翻译为 ``jalr x0, 0(x1)``,含义为跳转到寄存器 ``ra`` 保存的物理地址,由于 ``x0`` 是一个恒为 ``0`` 的寄存器,在 ``rd`` 中保存这一步被省略。 +从中可以看出,这两条指令在设置 pc 寄存器完成跳转功能之前,还将当前跳转指令的下一条指令地址保存在 rd 寄存器中,即 :math:`\text{rd}\leftarrow\text{pc}+4` 这条指令的含义。(这里假设所有指令的长度均为 4 字节)在 RISC-V 架构中,通常使用 ``ra`` 寄存器(即 ``x1`` 寄存器)作为其中的 ``rd`` 对应的具体寄存器,因此在函数返回的时候,只需跳转回 ``ra`` 所保存的地址即可。事实上在函数返回的时候我们常常使用一条 **伪指令** (Pseudo Instruction) 跳转回调用之前的位置: ``ret`` 。它会被汇编器翻译为 ``jalr x0, 0(x1)``,含义为跳转到寄存器 ``ra`` 保存的物理地址,由于 ``x0`` 是一个恒为 ``0`` 的寄存器,在 ``rd`` 中保存这一步被省略。 总结一下,在进行函数调用的时候,我们通过 ``jalr`` 指令保存返回地址并实现跳转;而在函数即将返回的时候,则通过 ``ret`` 伪指令回到跳转之前的下一条指令继续执行。这样,RISC-V 的这两条指令就实现了函数调用流程的核心机制。 diff --git a/source/final-lab.rst b/source/final-lab.rst index ce343e69..aa7d4795 100644 --- a/source/final-lab.rst +++ b/source/final-lab.rst @@ -133,9 +133,9 @@ * 可找老师要物理硬件开发板和相关开发资料 -14. 支持其他处理器(如ARM、x64等)。(难度:7) +14. 支持其他处理器(如鲲鹏 ARM64、x64 架构等)。(难度:7) - * 可基于QEMU来开发 + * 可基于 QEMU 来开发 * 可找老师要基于其他处理器的物理硬件开发板(如树莓派等)和相关开发资料