# rCore-Tutorial-v3 **Repository Path**: lispking/rCore-Tutorial-v3 ## Basic Information - **Project Name**: rCore-Tutorial-v3 - **Description**: 记录rCore-Tutorial-v3学习过程 - **Primary Language**: Rust - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-24 - **Last Updated**: 2023-10-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RISC-V学习过程 ## 环境准备 ### 基础环境信息 * CPU: Apple M1 * 宿主机OS:macOS Sonoma 14.0 * 虚拟机:使用 [OrbStack] 安装 `ubuntu 23.04`,选用 [OrbStack] 理由看[这里](https://docs.orbstack.dev/) ### Ubuntu 环境准备 * 准备 `Rust` 环境 ```shell 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 ``` * 安装 `rustc` 的 `nightly` 版本 ```shell rustup install nightly rustup default nightly ``` * 修改 `cargo` 所用的软件包镜像地址 ```shell cat < ~/.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" EOF ``` * 安装 `Rust` 相关的软件包 ```shell rustup target add riscv64gc-unknown-none-elf cargo install cargo-binutils rustup component add llvm-tools-preview rustup component add rust-src ``` * 修改 `ubuntu` 源 ```shell sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/ports.ubuntu.com/mirrors.ustc.edu.cn/' /etc/apt/sources.list ``` * 安装 `Qemu` 环境 ```shell # 安装编译所需的依赖包 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 libsdl2-dev \ git tmux python3 python3-pip ninja-build # 下载源码包 cd $home wget https://download.qemu.org/qemu-7.0.0.tar.xz # 解压 tar xJf qemu-7.0.0.tar.xz # 编译安装并配置 RISC-V 支持 cd qemu-7.0.0 ./configure --target-list=riscv64-softmmu,riscv64-linux-user # 如果要支持图形界面,可添加 " --enable-sdl" 参数 make -j$(nproc) ``` * 设置 `Qemu` 环境变量,可将以下命令写入在 `.bashrc` 文件中 ```shell export QEMU_PATH="$home/qemu-7.0.0" export PATH="$QEMU_PATH/build:$PATH" export PATH="$QEMU_PATH/build/riscv64-softmmu:$PATH" export PATH="$QEMU_PATH/build/riscv64-linux-user:$PATH" ``` * 验证 `Qemu` 和 `Rust` 版本 ```shell $ qemu-system-riscv64 --version QEMU emulator version 7.0.0 Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers $ qemu-riscv64 --version qemu-riscv64 version 7.0.0 Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers $ rustc -Vv rustc 1.75.0-nightly (1c05d50c8 2023-10-21) binary: rustc commit-hash: 1c05d50c8403c56d9a8b6fb871f15aaa26fb5d07 commit-date: 2023-10-21 host: aarch64-unknown-linux-gnu release: 1.75.0-nightly LLVM version: 17.0.3 ``` ## Hello, World之路 * 按照 [第一章:应用程序与基本执行环境](https://rcore-os.cn/rCore-Tutorial-Book-v3/chapter1/index.html) 教程步骤,一步一步编写`Hello World` 时,可能会碰到以下问题: - 执行 `make run` 命令后,可能没有任何响应,需要更新 [`rustsbi-qemu`](https://github.com/rustsbi/rustsbi-qemu/releases) `bootloader`包,本仓库已经更新到 [Prereleased 2023-03-06](bootloader/rustsbi-qemu.bin) 版本 - 教程中所有代码敲完后,可以会碰到狂打印 `It should shutdown!` 字眼后,并且出现各种`乱码`,原因是`sbi标准`已更改,原代码不适用,新版本代码放在[这里](ch1/os/src/sbi.rs),为方便学习,已经将相关代码上传到 [ch1目录](ch1/os/),执行 `make run` 后,若看到下面效果,代表环境准备完成。 ![Hello,World! 效果图](./images/hello-world.png) ## 未完待续 [OrbStack]: https://orbstack.dev/