跳到主要内容

ArceOS

ArceOS 的构建单元是 workspace 中的一个 app package,例如 arceos-helloworldarceos-httpserver。这与构建固定 starryos package 的 StarryOS,以及构建 axvisor 并加载 VM 描述的 Axvisor 不同。一次请求必须最终解析出 package;它可以来自 --package、Build Config 或 Snapshot。

1. 命令边界

ArceOS 的命令围绕 app 选择和运行目标展开,所有命令最终共享同一份解析后的 package、target 与 Build Config。下表说明每个入口消耗的主要契约。

命令职责
build构建 Rust app 或 app-c C 应用
qemu构建并以 QEMU TOML 启动
uboot构建并通过显式或自动发现的 U-Boot 配置启动
board构建并部署到远程板卡
test qemu / test board运行 Rust/C QEMU 测试或板级测试
defconfig <board>将 checked-in board build config 写为默认配置并更新 Snapshot
config ls列出 os/arceos/configs/board/ 下的 board 名称

共享参数为 --config--package--arch--target--smp--debug;QEMU 额外接受 --qemu-config--rootfs,U-Boot 接受 --uboot-config,板卡运行接受 --board-config--board-type--server--port

2. 应用选择

常规 buildubootboard 需要通过 CLI、配置或 Snapshot 选定 package。ArceOS 有一个仅适用于 qemu 的便利规则:当调用方既没有 package,也没有 config 时,ArceOS::qemu() 会寻找 target 对应的 os/arceos/configs/board/qemu-<arch>.toml。该文件目前选择 arceos-helloworld,因此可直接执行:

cargo xtask arceos qemu

一旦传入 --package--config,该默认值不参与解析;显式选择永远优先。

3. 配置布局

checked-in board 配置负责默认能力选择,QEMU 配置负责启动细节;两者不应混合维护。目录布局与 arceos/config.rsarceos/mod.rs 中的默认路径一致。

os/arceos/configs/
├── board/ # package + target + BuildInfo;供 defconfig 和缺失配置初始化
│ └── qemu-aarch64.toml
└── qemu/ # QEMU 启动契约
└── qemu-aarch64.toml

defconfig 将指定 board 文件复制到:

tmp/axbuild/config/<package>/build-<target>.toml

并把 package、arch、target、smp 和 config 写入 tmp/axbuild/.arceos.toml,同时清空旧 QEMU/U-Boot 路径。对于 buildqemu,若这个目标配置不存在,axbuild 会优先用同 target、同 package 的 qemu-* board 文件补齐它;隐式创建不会改变 Snapshot。

4. 构建路径

4.1 Rust 应用

普通 app 走 arceos/build/cargo_config.rs,使用共享的 BuildInfo::into_prepared_base_cargo_config_with_metadata()。它以 ax-std 的 Cargo metadata 为准拆分 feature,使用 musl PIE JSON target 编译 std,并默认保留 ELF。

4.2 C 应用

Build Config 中的 app-c 选择 C 应用路径。该字段相对路径按 Build Config 所在目录解析,目标目录中必须直接包含 .c 源文件。prepare_arceos_request() 将该请求解析为 ax-libc package,并验证 CLI、配置中的 package 选择与 C app 路径一致。

C app 使用 arceos/cbuild/ 中的 CMake/musl 工具链构建 ELF。resolve_c_app_features()max_cpu_num > 1 时加入 ax-std/smp,其余能力直接取自 Build Config 的 features

5. 能力约束

ArceOS 的 Rust app 使用共享 std-aware 构建路径和动态平台链接配置。BuildInfo::validate_features()reject_removed_std_field() 对 feature 和 TOML 根字段执行验证;具体字段与转发规则见 参数与配置

6. 命令示例

以下命令分别覆盖显式 app 选择、默认 QEMU、board-derived 配置和 C app 配置,便于验证请求解析是否符合预期。

# 显式构建 app
cargo xtask arceos build --package arceos-helloworld --arch aarch64

# 运行默认 QEMU app,或运行指定 app
cargo xtask arceos qemu
cargo xtask arceos qemu --package arceos-httpserver --smp 4

# 选择 checked-in board 配置
cargo xtask arceos config ls
cargo xtask arceos defconfig qemu-riscv64
cargo xtask arceos build

# C app 配置
cargo xtask arceos build --config path/to/build-c-app.toml