Skip to content

rcore-os/tgoskits

Repository files navigation

TGOSKits

Build & Test

TGOSKits 是一个面向操作系统与虚拟化开发的集成仓库。它用 Git Subtree 管理 60+ 独立组件,并把 ArceOS、StarryOS、Axvisor 以及相关平台 crate 放在同一工作区中,方便做组件级开发、系统级联调和统一测试。

这个仓库适合谁

  • 想先跑通 ArceOS、StarryOS 或 Axvisor 的新开发者
  • 想直接修改 components/ 并验证其在多个系统中的影响的贡献者
  • 想在统一工作区里管理 Subtree、测试矩阵和系统集成的人

从哪里开始

你的目标 建议先看 最短命令
第一次把仓库跑起来 docs/quick-start.md cargo xtask arceos run --package arceos-helloworld --arch riscv64
理解命令入口、工作区和测试入口 docs/build-system.md cargo xtask test std
基于组件开发三个系统 docs/components.md components/os/arceos/modules/ 开始定位
按 crate 维度系统学习仓库 docs/crates/README.md 先看批次总览,再跳到具体 crate 文档
开发 ArceOS 应用或模块 docs/arceos-guide.md cargo xtask arceos run --package arceos-helloworld --arch riscv64
深入理解 ArceOS 的分层、feature 装配与启动路径 docs/arceos-internals.md cargo xtask arceos run --package arceos-helloworld --arch riscv64
修改 StarryOS 内核或 rootfs 路径 docs/starryos-guide.md cargo xtask starry rootfs --arch riscv64
深入理解 StarryOS 的 syscall、进程与 rootfs 装载路径 docs/starryos-internals.md cargo xtask starry run --arch riscv64 --package starryos
运行或扩展 Axvisor docs/axvisor-guide.md cargo axvisor defconfig qemu-aarch64
深入理解 Axvisor 的 VMM、vCPU 与配置体系 docs/axvisor-internals.md cd os/axvisor && ./scripts/setup_qemu.sh arceos
管理组件来源和同步 docs/repo.md python3 scripts/repo/repo.py list

仓库结构

tgoskits/
├── components/                # subtree 管理的独立组件 crate
├── os/
│   ├── arceos/                # ArceOS: modules/api/ulib/examples
│   ├── StarryOS/              # StarryOS: kernel/starryos/make
│   └── axvisor/               # Axvisor: src/configs/local xtask
├── platform/                  # 平台相关 crate
├── test-suit/                 # ArceOS / StarryOS 系统测试
├── xtask/                     # 根目录 tg-xtask
├── scripts/
│   └── repo/                  # subtree 管理脚本与 repos.csv
└── docs/                      # 新开发者文档

最容易误解的一点是:components/ 并不是按 Hypervisor/ArceOS/Starry 再分子目录。大多数组件直接平铺在 components/ 下,类别信息主要来自 scripts/repo/repos.csv、根 Cargo.toml 和各系统对它们的依赖关系。

按 Crate 学习仓库

如果你已经不是“先跑起来”阶段,而是想系统理解这个仓库里每个 crate 的定位、边界和它们如何流到 ArceOS / StarryOS / Axvisor,那么最直接的入口是:

这份总览和本 README、docs/components.md 的关系可以这样理解:

  • README.md:回答“仓库怎么跑、怎么进入三个系统”
  • docs/components.md:回答“组件处在哪一层、通常被谁消费”
  • docs/crates/README.md:回答“具体某个 crate 做什么、依赖谁、该按什么顺序读”

建议按下面三种方式使用它:

你的目的 建议先看 docs/crates/README.md 的哪一部分 适合接着看什么
已经知道 crate 名字,想直接查技术文档 文档索引 直接跳到对应 docs/crates/<name>.md
想按主线系统学习,而不是按目录乱看 手工精修批次批次与三大系统子系统对照 再沿 按批次推荐阅读与快速跳转 顺序读
想补某条能力链,比如平台、驱动、文件系统、虚拟化 按批次推荐阅读与快速跳转 再结合 docs/components.md 看它落在哪一层

如果你不知道第一篇该看哪一篇,可以直接从下面几条阅读路径起步:

  • 想理解 ArceOS 主干:先看 axhalaxtaskaxruntimeaxmm
  • 想理解平台与板级 bring-up:先看 axplataxplat-macros、对应 axplat-* 平台包
  • 想理解 Axvisor:先看 axvmaxvcpuaxaddrspaceaxvisor_apiaxvisor
  • 想理解 StarryOS:先看 starry-kernelstarry-processstarry-signalstarry-vm

这样读的好处是:先建立统一术语,再回到具体源码时,不容易把“平台包、模块层、叶子基础件、样例程序、测试桩”混在一起。

理解工作区关系

  • Cargo.toml 把常用组件、ArceOS 模块与示例、StarryOS 包、Axvisor、platform/xtask/ 放进一个统一 workspace。
  • os/arceosos/StarryOS 自己仍保留独立 workspace;根工作区通过 membersexclude[patch.crates-io] 把需要的 crate 接进来。
  • 一些目录本身是嵌套 workspace,比如 components/axplat_cratescomponents/axdriver_crates。这些目录通常不会直接作为根 workspace 成员加入,而是通过 patch 指向其中的具体 crate。

这意味着:

  • 在仓库根目录开发,适合做跨系统联调和统一测试。
  • os/arceos/os/StarryOS/os/axvisor/ 子目录开发,适合聚焦某一个系统的本地构建入口。

命令入口

位置 命令 说明
仓库根目录 cargo xtask ... tg-xtask,负责 ArceOS、StarryOS 和统一测试
仓库根目录 cargo arceos ... cargo xtask arceos ... 的别名
仓库根目录 cargo starry ... cargo xtask starry ... 的别名
仓库根目录 cargo axvisor ... 调用 os/axvisor 自带 xtask 的别名
os/arceos/ make ... ArceOS 的传统构建入口
os/StarryOS/ make ... StarryOS 的传统构建入口
os/axvisor/ cargo xtask ... Axvisor 本地 xtask,等价于根目录 cargo axvisor ...

需要特别注意:

  • 根目录的 cargo xtask 目前只有 testarceosstarry 三类子命令。
  • Axvisor 的构建与运行命令由 os/axvisor 自己的 xtask 提供,所以要么在根目录执行 cargo axvisor ...,要么进入 os/axvisor/ 执行 cargo xtask ...

5 分钟体验

git clone https://github.com/rcore-os/tgoskits.git
cd tgoskits

# ArceOS: 最快的 Hello World 路径
cargo xtask arceos run --package arceos-helloworld --arch riscv64

# StarryOS: 首次运行前先准备 rootfs
cargo xtask starry rootfs --arch riscv64
cargo xtask starry run --arch riscv64 --package starryos

# Axvisor: 推荐使用官方 setup 脚本准备 Guest 和 rootfs
cd os/axvisor
./scripts/setup_qemu.sh arceos
cargo xtask qemu \
  --build-config configs/board/qemu-aarch64.toml \
  --qemu-config .github/workflows/qemu-aarch64.toml \
  --vmconfigs tmp/vmconfigs/arceos-aarch64-qemu-smp1.generated.toml

Axvisor 不能只靠 defconfig/build/qemu 三条命令直接跑起来,因为默认 QEMU 配置会引用 tmp/rootfs.img。推荐先用 os/axvisor/scripts/setup_qemu.sh 自动准备 Guest 镜像、VM 配置和 rootfs,再运行 QEMU。完整说明见 docs/axvisor-guide.md

基于组件开发的最短闭环

  1. components/os/arceos/modules/os/StarryOS/kernel/os/axvisor/src/ 里找到你要修改的入口。
  2. 先跑最小消费者,而不是一上来跑全量测试。
  3. 改动稳定后,再补系统测试和 host 测试。

常用验证命令如下:

# host / std crate
cargo xtask test std

# ArceOS
cargo xtask arceos run --package arceos-helloworld --arch riscv64
cargo xtask test arceos --target riscv64gc-unknown-none-elf

# StarryOS
cargo xtask starry rootfs --arch riscv64
cargo xtask starry run --arch riscv64 --package starryos
cargo xtask test starry --target riscv64gc-unknown-none-elf

# Axvisor
cd os/axvisor
./scripts/setup_qemu.sh arceos
cargo xtask qemu \
  --build-config configs/board/qemu-aarch64.toml \
  --qemu-config .github/workflows/qemu-aarch64.toml \
  --vmconfigs tmp/vmconfigs/arceos-aarch64-qemu-smp1.generated.toml

# Axvisor 统一测试
cargo xtask test axvisor --target aarch64-unknown-none-softfloat

Subtree 与组件来源

  • 组件来源、类别和落地路径记录在 scripts/repo/repos.csv
  • Subtree 的添加、拉取、推送和 CI 同步策略见 docs/repo.md
  • 新开发者如果只是“改组件并验证系统”,可以先读 docs/components.md,不必先掌握全部 Subtree 细节。

进一步阅读

许可证

仓库整体采用 Apache-2.0,各组件可能带有自己的许可证文件,具体以各组件目录为准。

About

tgoskits

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors