StarryOS 开发指南
StarryOS 是构建在 ArceOS 模块层之上的 Linux 兼容操作系统。本文档面向在 TGOSKits 工作区内进行 StarryOS 相关开发的场景,覆盖开发环境、内核开发规范、Syscall 开发流程、用户态程序开发、rootfs 管理、测试策略、调试技巧和多架构注意事项。
架构分层、syscall 分发和进程模型见 StarryOS 架构。 最短命令和快速启动见 快速开始。 构建系统总览见 构建与运行。
1. 开发环境
1.1 工具链
StarryOS 共享 TGOSKits 工作区的统一工具链(nightly-2026-04-27),无需额外配置。详见 ArceOS 开发指南 → 开发环境。
1.2 QEMU
StarryOS 需要更多内存(推荐 ≥ 512M)和可能的网络/块设备:
# 基本验证
cargo xtask starry qemu --arch riscv64
# aarch64
cargo xtask starry qemu --arch aarch64
1.3 交叉编译工具链(用户态程序开发)
开发用户态测试程序时需要交叉编译器:
| 架构 | 工具链包 | 前缀 |
|---|---|---|
| aarch64 | gcc-aarch64-linux-gnu | aarch64-linux-gnu-gcc |
| riscv64 | gcc-riscv64-linux-gnu | riscv64-linux-gnu-gcc |
安装示例:
sudo apt install gcc-aarch64-linux-gnu gcc-riscv64-linux-gnu
如果使用 musl 静态链接:
# 安装 musl 交叉工具链
sudo apt install musl-tools
# 或使用 musl-cross-make 获取交叉版本
2. 目录结构总览
os/StarryOS/
├── starryos/ # StarryOS 启动包
│ ├── Cargo.toml # 包级 feature:qemu, smp, rknpu
│ └── src/
│ └── main.rs # 入 口
├── kernel/ # StarryOS 内核(starry-kernel)
│ ├── Cargo.toml # 内核 feature:memtrack, input, vsock, rknpu
│ └── src/
│ ├── entry.rs # 初始进程创建,加载 /bin/sh
│ ├── lib.rs # crate root
│ ├── config/ # 内核配置
│ ├── file/ # 文件描述符表、文件操作
│ ├── mm/ # 内存管理、用户地址空间、ELF 加载
│ ├── pseudofs/ # 伪文件系统(devfs, procfs 等)
│ ├── syscall/ # Syscall 完整实现
│ │ ├── mod.rs # Syscall 分发
│ │ ├── fs/ # 文件系统相关 syscall
│ │ ├── task/ # 进程/线程相关 syscall
│ │ ├── mm/ # 内存管理相关 syscall
│ │ ├── net/ # 网络 socket syscall
│ │ ├── signal/ # 信号相关 syscall
│ │ ├── sync/ # futex、mutex、信号量
│ │ ├── ipc/ # pipe、shm、消息队列
│ │ ├── io_mpx/ # epoll、poll、select
│ │ ├── time/ # 时间相关 syscall
│ │ ├── resources/ # rlimit、prctl、getcpu
│ │ └── sys/ # uname、sysinfo、getpid 等
│ ├── task/ # 线程/进程数据、futex、信号、凭证
│ ├── time.rs # 时间管理
│ └── trap.rs # Trap/异常处理
└── Makefile # 构建 rootfs 和运行
StarryOS 专用组件(位于 components/