Skip to content

chaos-kernel/chaos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7a787df · Aug 24, 2024
Jul 23, 2024
May 22, 2024
Aug 19, 2024
Aug 19, 2024
May 26, 2024
Aug 19, 2024
May 22, 2024
Aug 18, 2024
May 22, 2024
May 22, 2024
May 22, 2024
Aug 18, 2024
Aug 24, 2024
May 22, 2024
Aug 18, 2024
May 28, 2024

Repository files navigation

ChaOS

USTB

参赛文档

系统介绍文档在 docs 文件夹。初赛文档是 这个

开发日志发布在队员的个人博客上:

GitLab 仓库GitHub 仓库 保持同步。

参赛信息

使用说明

注意:以下所有指令皆在项目根目录下执行

若是第一次编译 chaos,需要运行 make env 来配置 cargo 编译环境。

运行 make all 来编译项目,可在根目录获得操作系统以及 SBI 的二进制文件。

运行 make run 来编译项目并且启动 QEMU 运行内核。

开发环境配置

推荐开发环境为 x86_64 架构 Ubuntu 22.04 LTS,其他平台的开发稳定性不作保证。

推荐使用 vscode + rust-analyzer 插件进行开发。

首先安装 Rust:

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

安装过程中全程选择默认选项即可。

可以将 Rust 的包管理器 cargo 的源替换成中科大源。打开或新建 ~/.cargo/config.toml 文件,添加以下内容:

[source.crates-io]
replace-with = 'ustc'

[source.ustc]
registry = "sparse+https://mirrors.ustc.edu.cn/crates.io-index/"

然后编译安装 QEMU 7.0.0:

# 切换到 home 目录
cd ~
# 安装编译所需的依赖包
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 git tmux python3 ninja-build
# 下载源码包
# 如果下载速度过慢可以使用我们提供的百度网盘链接:https://pan.baidu.com/s/1z-iWIPjxjxbdFS2Qf-NKxQ
# 提取码 8woe
wget https://download.qemu.org/qemu-7.0.0.tar.xz
# 解压
tar xvJf qemu-7.0.0.tar.xz
# 编译安装并配置 RISC-V 支持
cd qemu-7.0.0
./configure --target-list=riscv64-softmmu,riscv64-linux-user
make -j$(nproc)

将编译得到的以下三个目录添加到 PATH 中:

export PATH="$HOME/qemu-7.0.0/build/:$PATH"
export PATH="$HOME/qemu-7.0.0/build/riscv64-softmmu:$PATH"
export PATH="$HOME/qemu-7.0.0/build/riscv64-linux-user:$PATH"

也可将其移至其他地方存放,只要能放在 PATH 中即可。

重启终端,确认 QEMU 版本:

qemu-system-riscv64 --version
qemu-riscv64 --version

如果正确识别指令并输出版本为 7.0.0,即说明 QEMU 安装正确。

rust-analyzer 插件 can't find crate for `test` 报错解决

在根目录下新建文件 .vscode/settings.json,添加以下内容:

{
    // Prevent "can't find crate for `test`" error on no_std
    // Ref: https://github.com/rust-lang/vscode-rust/issues/729
    "rust-analyzer.cargo.target": "riscv64gc-unknown-none-elf",
    "rust-analyzer.checkOnSave.allTargets": false,
    // "rust-analyzer.cargo.features": [
    //     "board_qemu"
    // ]
}

重新加载 rust-analyzer 即可。

更改 chaos 初始进程

chaos 通过将初始进程的 elf 文件链接到内核镜像中,从而在系统启动之后运行。链接脚本位于 os/src/link_initproc.S

脚本默认将 user/target/riscv64gc-unknown-none-elf/release/initproc 链接到内核中作为初始进程。通过修改 .incbin 来链接不同的应用程序作为初始进程。链接的文件必须要是 elf 格式文件。