rCore-Tutorial #0 实验环境配置

yyi
yyi
2024-02-23 / 0 评论 / 157 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年02月24日,已超过260天没有更新,若内容或图片失效,请留言反馈。

当你看到这个标题,是的,我要开个大坑了,而且难度很高,貌似没有什么现成的资料。

ipads著名的chcore是基于arm架构的,但是是C开发的,清华著名的rcore是RISCV架构的,但是是Rust开发的。

我想搞一个Rust+AArch64的Kernel,显然,我既不怎么会Rust,又不怎么会ARM,我也就只剩一颗想做的心了。当然,如果最后真的搞不下去,我也想至少把rCore-RISCV这个Lab做完做好。

我不知道是迁移chcore更难,还是迁移rcore更难,先选一个吧,迁移chcore面对的是Rust的大量特质要重构,迁移rcore面对的是架构差异,从引导、中断到分页都要重构。但是毕竟是给人写的嘛。

这个环境配置Chapter我可能还会慢慢的更新,也可能更的不全,有的小依赖可能随手就安了忘记更新,只能说尽量做吧。

希望真的能把这个项目做到最后。

0 环境配置 参考链接

Rust开发环境配置

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
source "$HOME/.cargo/env"

> rustc 1.76.0 (07dca489a 2024-02-04)

文档中说必须要nightly版本,关于Nightly版本是什么:Rust版本说明

我们也切换到nightly

rustup install nightly
rustup default nightly

这里出现了个小插曲,VM空间不够了,稍稍扩容一下,没想到扩容也没那么简单

插曲

这里df -h可以看到sda3已经满了

image-20240223000614080

fdisk -l

image-20240223000652134

在VMWare的图形化界面操作后

运行fdisk /dev/sda 并跟着输入n,然后一路回车,最后p一下

n是新建分区,p是打印

image-20240223000811310

如果正确新建了一个Linux filesystem分区,按w写入分区表,然后reboot下

我发现这么搞太麻烦了,反正我有快照,如果直接干掉sda3的分区表,新建分区,能行么,大胆操作一下

image-20240223001259349

fdisk里生效了,df里没生效,根据我搞FreeBSD的经验,要growfs一下

image-20240223001457335

resize2fs /dev/sda3

image-20240223001645979

插曲结束,大功告成。


安装完nightly之后,应该有如下输出(版本号不对无所谓)

❯ rustc --version
rustc 1.78.0-nightly (3406ada96 2024-02-21)

crates换源,不赘述

安装rust软件包的时候,原文档只给了 riscv64gc-unknown-none-elf 作为交叉编译的target,我们还要加一个

aarch64-unknown-none

rustup target add riscv64gc-unknown-none-elf
rustup target add aarch64-unknown-none
cargo install cargo-binutils
# 后面这俩我这时候不能用清华源
rustup component add llvm-tools-preview
rustup component add rust-src

这俩都是Tier2的Support,应该不会有太大问题 Platform Support


QEMU环境

这东西对我来说比较熟悉,可能会简略一点

sudo apt-get 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

别管有没有了安装一把梭

其实纠结了一下,Tutoial给定的是qemu 7.0.0 实验,但是本文撰写时qemu已经是这个状态了:
image-20240223005028930

搜了一下,看到了这个:

image-20240223005128432

我超,可能是要硬着头皮上Qemu8了,一步到位!(虽然我知道这大概率不是一个明智的选择,比起很低概率会用上的新支持,更大概率是会遇到和教程版本不一致导致的问题,但是谁管呢?真的有人不喜欢用新的东西么?)

wget https://download.qemu.org/qemu-8.2.1.tar.xz
# 可能会有点慢,有条件上proxy吧
tar xJvf qemu-8.2.1.tar.xz 

此时要参考一下qemu的官方文档,看看我们选择啥targets,当然不嫌费劲可以直接全部编译

image-20240223010342533

可能不用参考了,就选这四个吧

./configure --target-list=riscv64-softmmu,riscv64-linux-user,aarch64-linux-user,aarch64-softmmu
make -j16

image-20240223011138931

在编译目录的./build目录下即可看到编译完的qemu,添加到PATH中

image-20240223011259282

跑起来!

git clone git@github.com:rcore-os/rCore-Tutorial-v3.git
cd os
make run

image-20240223213451317

0

评论 (0)

取消