当你看到这个标题,是的,我要开个大坑了,而且难度很高,貌似没有什么现成的资料。
ipads著名的chcore是基于arm架构的,但是是C开发的,清华著名的rcore是RISCV架构的,但是是Rust开发的。
我想搞一个Rust+AArch64的Kernel,显然,我既不怎么会Rust,又不怎么会ARM,我也就只剩一颗想做的心了。当然,如果最后真的搞不下去,我也想至少把rCore-RISCV这个Lab做完做好。
我不知道是迁移chcore更难,还是迁移rcore更难,先选一个吧,迁移chcore面对的是Rust的大量特质要重构,迁移rcore面对的是架构差异,从引导、中断到分页都要重构。但是毕竟是给人写的嘛。
这个环境配置Chapter我可能还会慢慢的更新,也可能更的不全,有的小依赖可能随手就安了忘记更新,只能说尽量做吧。
希望真的能把这个项目做到最后。
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已经满了
fdisk -l
在VMWare的图形化界面操作后
运行fdisk /dev/sda
并跟着输入n,然后一路回车,最后p一下
n是新建分区,p是打印
如果正确新建了一个Linux filesystem分区,按w写入分区表,然后reboot下
我发现这么搞太麻烦了,反正我有快照,如果直接干掉sda3的分区表,新建分区,能行么,大胆操作一下
fdisk里生效了,df里没生效,根据我搞FreeBSD的经验,要growfs一下
resize2fs /dev/sda3
插曲结束,大功告成。
安装完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已经是这个状态了:
搜了一下,看到了这个:
我超,可能是要硬着头皮上Qemu8了,一步到位!(虽然我知道这大概率不是一个明智的选择,比起很低概率会用上的新支持,更大概率是会遇到和教程版本不一致导致的问题,但是谁管呢?真的有人不喜欢用新的东西么?)
wget https://download.qemu.org/qemu-8.2.1.tar.xz
# 可能会有点慢,有条件上proxy吧
tar xJvf qemu-8.2.1.tar.xz
此时要参考一下qemu的官方文档,看看我们选择啥targets,当然不嫌费劲可以直接全部编译
可能不用参考了,就选这四个吧
./configure --target-list=riscv64-softmmu,riscv64-linux-user,aarch64-linux-user,aarch64-softmmu
make -j16
在编译目录的./build目录下即可看到编译完的qemu,添加到PATH中
跑起来!
git clone git@github.com:rcore-os/rCore-Tutorial-v3.git
cd os
make run
评论 (0)