实验环境配置

下面是初步的本地配置过程

实验环境

  • 操作系统:Ubuntu 24.04
  • QEMU >= 9.1
  • musl: x86_64 + riscv64 + aarch64 + loongarch64

配置Rust开发环境

首先安装 Rust 版本管理器 rustup 和 Rust 包管理器 cargo,这里我们用官方的安装脚本来安装:

curl https://sh.rustup.rs -sSf | sh

如果通过官方的脚本下载失败了,可以在浏览器的地址栏中输入 https://sh.rustup.rs 来下载脚本,在本地运行即可。

可通过如下命令安装 rustc 的 nightly 版本。

rustup install nightly

再次确认一下我们安装了正确的 rustc 版本(以下为一个示例):

$ rustc --version rustc 1.83.0 (90b35a623 2024-11-26)

安装必要依赖

echo "deb http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm main" | sudo tee -a /etc/apt/sources.list wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc sudo apt-get update \ && apt-get install -y --no-install-recommends libclang-19-dev wget make python3 \ xz-utils python3-venv ninja-build bzip2 meson cmake dosfstools build-essential \ pkg-config libglib2.0-dev git libslirp-dev \ && rm -rf /var/lib/apt/lists/*

安装QEMU

# 安装与qemu相关的软件包 $ wget https://download.qemu.org/qemu-9.2.1.tar.xz $ tar xf qemu-9.2.1.tar.xz \ && cd qemu-9.2.1 \ && ./configure --prefix=/qemu-bin-9.2.1 \ --target-list=loongarch64-softmmu,riscv64-softmmu,aarch64-softmmu,x86_64-softmmu \ --enable-gcov --enable-debug --enable-slirp \ && make -j$(nproc) \ && make install # 配置环境变量。。 # 测试是否正确安装 $ qemu-system-x86_64 --version $ rm -rf qemu-9.2.1 qemu-9.2.1.tar.xz

安装 musl cross 工具链

wget https://musl.cc/aarch64-linux-musl-cross.tgz wget https://musl.cc/riscv64-linux-musl-cross.tgz wget https://musl.cc/x86_64-linux-musl-cross.tgz wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz # install tar zxf aarch64-linux-musl-cross.tgz tar zxf riscv64-linux-musl-cross.tgz tar zxf x86_64-linux-musl-cross.tgz tar zxf loongarch64-linux-musl-cross.tgz rm -f *.tgz

在 Docker 下运行

请参考如下 Dockerfile

FROM rust:slim RUN apt-get update && apt-get install -y wget RUN echo /etc/apt/sources.list << deb http://apt.llvm.org/bookworm/ llvm-toolchain-bookworm main RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc RUN apt-get update \ && apt-get install -y --no-install-recommends libclang-19-dev make python3 \ xz-utils python3-venv ninja-build bzip2 meson \ pkg-config libglib2.0-dev git libslirp-dev cmake dosfstools build-essential \ && rm -rf /var/lib/apt/lists/* RUN cargo install cargo-binutils axconfig-gen COPY rust-toolchain.toml /rust-toolchain.toml RUN rustc --version RUN wget https://musl.cc/aarch64-linux-musl-cross.tgz \ && wget https://musl.cc/riscv64-linux-musl-cross.tgz \ && wget https://musl.cc/x86_64-linux-musl-cross.tgz \ && wget https://github.com/LoongsonLab/oscomp-toolchains-for-oskernel/releases/download/loongarch64-linux-musl-cross-gcc-13.2.0/loongarch64-linux-musl-cross.tgz \ && tar zxf aarch64-linux-musl-cross.tgz \ && tar zxf riscv64-linux-musl-cross.tgz \ && tar zxf x86_64-linux-musl-cross.tgz \ && tar zxf loongarch64-linux-musl-cross.tgz \ && rm -f *.tgz RUN wget https://download.qemu.org/qemu-9.2.1.tar.xz \ && tar xf qemu-9.2.1.tar.xz \ && cd qemu-9.2.1 \ && ./configure --prefix=/qemu-bin-9.2.1 \ --target-list=loongarch64-softmmu,riscv64-softmmu,aarch64-softmmu,x86_64-softmmu \ --enable-gcov --enable-debug --enable-slirp \ && make -j$(nproc) \ && make install RUN rm -rf qemu-9.2.1 qemu-9.2.1.tar.xz ENV PATH="/x86_64-linux-musl-cross/bin:/aarch64-linux-musl-cross/bin:/riscv64-linux-musl-cross/bin:/loongarch64-linux-musl-cross/bin:/qemu-bin-9.2.1/bin:$PATH"

请执行如下指令

$ git clone git@github.com:oscomp/starry-next.git $ cd starry-next $ ./scripts/get_deps.sh $ cd .arceos $ docker build -t starry -f ./Dockerfile . $ cd .. # 在项目根目录下构建容器 $ docker run -it -v $(pwd):/starry -w /starry starry bash

若 Docker pull 或 Docker build 出现超时等问题,可能是因为缺乏代理上网的配置。可以参考如下资料:

  • Docker pull
    • 使用代理:https://docs.docker.com/reference/cli/docker/image/pull/#proxy-configuration
    • 换用可用国内源(自行查找)
  • Docker build
    • 使用代理:https://docs.docker.com/engine/cli/proxy/#build-with-a-proxy-configuration
  • Docker run 也可以使用代理选项,相关操作与 build 类似,可以自行查阅资料

进入项目目录

# 若还未拉取 Starry Next 仓库 $ git clone git@github.com:oscomp/starry-next.git $ cd starry-next # 拉取基座仓库 ArceOS $ ./scripts/get_deps.sh # 配置 Rust 环境 $ cd .arceos $ rustup target add x86_64-unknown-linux-musl $ rustup target add aarch64-unknown-linux-musl $ rustup target add riscv64gc-unknown-linux-musl $ rustup target add x86_64-unknown-none $ rustup target add riscv64gc-unknown-none-elf $ rustup target add aarch64-unknown-none $ rustup target add aarch64-unknown-none-softfloat $ rustup component add llvm-tools-preview $ cargo install cargo-binutils axconfig-gen $ cd ..