Skip to content
Merged
Show file tree
Hide file tree
Changes from 16 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
b8e2f2e
refactor(axbuild): remove firmware cache warmer, add ArceOS QEMU defa…
ZCShou Jul 15, 2026
88504c9
refactor(axbuild): make app features the single source of truth for A…
ZCShou Jul 15, 2026
2d9fcd9
refactor(axbuild): remove dynamic platform QEMU boot injection and en…
ZCShou Jul 15, 2026
6309569
fix(axbuild): enforce std-compat in axvisor Cargo.toml and fix UEFI E…
ZCShou Jul 15, 2026
7669bf2
fix(arceos/shell): select fatfs backend explicitly instead of generic…
ZCShou Jul 15, 2026
874ac5c
fix(starry): add std-compat feature to Cargo.toml for musl dynamic li…
ZCShou Jul 15, 2026
f171fa2
fix(axbuild): default x86_64 Axvisor to vmx backend and make to_bin/u…
ZCShou Jul 15, 2026
ed5ddbb
fix(arceos): enable UEFI boot for LoongArch C and Rust test configs
ZCShou Jul 15, 2026
da474fc
Merge branch 'dev' into axbuild
ZCShou Jul 15, 2026
ae5428f
fix(arceos): enable UEFI boot for x86_64 C and Rust test configs
ZCShou Jul 15, 2026
1af37b1
fix(axbuild): enable UEFI boot for LoongArch and x86_64 StarryOS/axte…
ZCShou Jul 15, 2026
0c6f189
fix(axbuild): enable UEFI host boot for axvisor nimbos smoke test
ZCShou Jul 15, 2026
3126dd2
fix(axbuild): use per-drive snapshot instead of global -snapshot for …
ZCShou Jul 15, 2026
a81819d
refactor(axbuild): remove target-based to_bin inference and simplify …
ZCShou Jul 16, 2026
2af95d9
fix(axbuild): enable UEFI host boot for x86_64 VMX and SVM axvisor sm…
ZCShou Jul 16, 2026
17c32ef
chore(spin): bump pinned version from 0.12.0 to 0.12.2
ZCShou Jul 16, 2026
c95af65
fix(axbuild): make vmx feature explicit in board configs instead of d…
ZCShou Jul 16, 2026
f1a6311
fix(arceos): enable to_bin for AArch64 QEMU config for high-half kern…
ZCShou Jul 16, 2026
b09b6e4
fix(axbuild): reject UEFI config without to_bin and update removed-fe…
ZCShou Jul 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .claude/skills/arch-platform-porting/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ Current Axvisor LoongArch QEMU bring-up uses the dynamic UEFI platform path. The
- **RISC-V per-CPU register contract**: `ax-percpu` reserves `x3`/`gp` as the per-CPU base, so every RISC-V kernel target spec must pass `--no-relax` to the linker. Do not enable global-pointer relaxation or define `__global_pointer$` unless the per-CPU register design changes at the same time.
- **Build system**: wire arch/target mapping in `scripts/axbuild`, dynamic platform defaults, feature propagation, kernel format conversion, UEFI/to-bin behavior, rootfs handling, and per-OS test discovery.
- **QEMU and firmware**: verify QEMU binary, machine type, CPU, SMP count, pflash/OVMF files, serial console, disk/rootfs device, `-snapshot`, debug flags, timeout, and success/fail regexes.
QEMU `uefi`, `to_bin`, acceleration, CPU feature, and device choices are part of each
`qemu-*.toml` contract; axbuild must not infer or overwrite them from the target architecture
or host `/dev/kvm` availability.
Axvisor x86_64 CI build groups select exactly one virtualization backend (`vmx` or `svm`);
the generic QEMU board remains backend-neutral while axbuild temporarily defaults an omitted
backend to `vmx`. AMD/SVM CI configurations must keep their explicit `svm` feature.
- **someboot arch layer**: implement or audit entry, relocation, BSS clearing, stack setup, memory map parsing, paging, trap vectors, timer, IRQ, power, SMP, and address translation.
- **CPU runtime**: update `components/axcpu/src/<arch>` for trap entry, context switch, user/kernel context, syscall return path, FP/SIMD state, and per-CPU assumptions.
- **Platform bridge**: update `platforms/axplat-dyn`, `platforms/somehal`, platform config, memory regions, IRQ routing, timer source, power operations, and CPU boot operations.
Expand Down
4 changes: 2 additions & 2 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ mmio-api = { version = "0.2.2", path = "memory/mmio-api" }
cvi-vdec-uapi = { version = "0.1.0", path = "drivers/interface/cvi-vdec-uapi" }
lock_api = { version = "0.4", default-features = false }
log = "0.4"
spin = { version = "=0.12.0", default-features = false, features = ["lock_api", "once", "lazylock"] }
spin = { version = "=0.12.2", default-features = false, features = ["lock_api", "once", "lazylock"] }
atomic-waker = { version = "1.1", default-features = false }
ostool = { version = "0.24.0" }
riscv = { version = "0.16.1", default-features = false }
Expand Down
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ qemu-system-loongarch64 --version
Then use the unified `cargo xtask` entry point to run the three system paths:

```bash
# ArceOS: run Hello World
cargo xtask arceos qemu --package arceos-helloworld --arch aarch64
# ArceOS: run the default Hello World
cargo xtask arceos qemu --arch aarch64

# StarryOS: prepare rootfs before the first run
cargo xtask starry rootfs --arch aarch64
Expand All @@ -93,7 +93,7 @@ cargo xtask starry qemu --arch aarch64
cargo xtask axvisor qemu --arch aarch64
```

If you only want the shortest path to a successful run, start with ArceOS Hello World. For more systems, architecture combinations, and QEMU options, see the [quick start overview](https://rcore-os.cn/tgoskits/docs/quickstart/overview) and [run and QEMU](https://rcore-os.cn/tgoskits/docs/build/run).
If you only want the shortest path to a successful run, start with the default ArceOS Hello World app. Pass `--package arceos-shell` when you specifically need the interactive Shell. For more systems, architecture combinations, and QEMU options, see the [quick start overview](https://rcore-os.cn/tgoskits/docs/quickstart/overview) and [run and QEMU](https://rcore-os.cn/tgoskits/docs/build/run).

## 4. Contributing

Expand Down
7 changes: 2 additions & 5 deletions apps/arceos/arce_agent/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ edition.workspace = true
publish = false

[features]
default = []
arceos = ["dep:ax-std"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos"]

[dependencies]
ax-std = { workspace = true, optional = true }
Expand All @@ -20,6 +20,3 @@ serde_json = "1"

log = "0.4"
env_logger = "0.11"

[package.metadata.axstd]
features = ["log-level-warn"]
7 changes: 2 additions & 5 deletions apps/arceos/helloworld/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ authors = ["eternalcomet <mydragonos@outlook.com>"]
publish = false

[features]
default = []
arceos = ["dep:ax-std"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-debug"]
7 changes: 2 additions & 5 deletions apps/arceos/httpclient/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,9 @@ publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = []
arceos = ["dep:ax-std", "ax-std/net"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos", "ax-std/net"]
dns = []

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-debug"]
7 changes: 2 additions & 5 deletions apps/arceos/httpserver/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ authors = ["Yuekai Jia <equation618@gmail.com>"]
publish = false

[features]
default = []
arceos = ["dep:ax-std"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-debug"]
7 changes: 2 additions & 5 deletions apps/arceos/io_test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ authors = ["eternalcomet <mydragonos@outlook.com>"]
publish = false

[features]
default = []
arceos = ["dep:ax-std", "ax-std/fs"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos", "ax-std/fs"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-off"]
9 changes: 4 additions & 5 deletions apps/arceos/shell/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,10 @@ publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = []
arceos = ["dep:ax-std", "ax-std/fs"]
default = ["arceos"]
# The QEMU disk image is FAT32; selecting the backend here keeps filesystem
# capability in the application manifest instead of relying on axbuild fixes.
arceos = ["dep:ax-std", "ax-std/arceos", "ax-std/fatfs"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-debug"]
7 changes: 2 additions & 5 deletions apps/arceos/thread_test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,8 @@ authors = ["eternalcomet <mydragonos@outlook.com>"]
publish = false

[features]
default = []
arceos = ["dep:ax-std", "ax-std/multitask", "ax-std/irq"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos", "ax-std/multitask", "ax-std/irq"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-off"]
7 changes: 2 additions & 5 deletions apps/arceos/tokio_test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,9 @@ publish = false
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[features]
default = []
arceos = ["dep:ax-std", "ax-std/multitask", "ax-std/irq"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos", "ax-std/multitask", "ax-std/irq"]

[dependencies]
ax-std = { workspace = true, optional = true }
tokio = { version = "1", features = ["rt", "macros", "time", "sync"] }

[package.metadata.axstd]
features = ["log-level-off"]
4 changes: 2 additions & 2 deletions components/aic8800/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ readme = "README.md"
description = "AIC8800 Wi-Fi driver core (SDIO, firmware, WPA2, SoftAP). OS-independent; runtime capabilities are injected via aic8800::WifiRuntime."
# Vendor firmware blobs are not vendored into git or the package tarball; the
# build script provisions them into OUT_DIR (from $AIC8800_FIRMWARE_DIR, the
# in-tree `firmware/` dir populated by `cargo xtask`, or the pinned upstream
# source) and verifies each against its SHA-256. Only the top-level blob dir is
# optional in-tree `firmware/` cache, or the pinned upstream source) and
# verifies each against its SHA-256. Only the top-level blob dir is
# excluded — the leading slash anchors the glob to the package root so it does
# NOT also match the `src/fw/firmware/` source module (required to build).
# Without the anchor, `firmware/` matches at any depth and the tarball drops
Expand Down
13 changes: 6 additions & 7 deletions components/aic8800/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,15 @@ tarball。`build.rs` 在编译时把它们准备到 `OUT_DIR/firmware/`,`src/f
`build.rs` 的固件来源优先级(命中即止):

1. `$AIC8800_FIRMWARE_DIR/<name>` — 显式本地缓存 / 离线镜像目录。
2. 仓库内 `components/aic8800/firmware/<name>``cargo xtask` 预下载填充;
在本仓库内(含离线)编译时走这条,**不联网**
3. 从上游 pin 的 commit 下载 — 用于脱离本仓库的独立构建(如 crates.io)
2. 仓库内 `components/aic8800/firmware/<name>`可选的本地缓存;手动放入并通过
SHA-256 校验后,可在离线构建时使用
3. 从上游 pin 的 commit 下载 — 任一构建在前两项均不可用时使用

清单、摘要与上游 pin 见 [`build.rs`](build.rs)
[`scripts/axbuild/src/firmware.rs`](../../scripts/axbuild/src/firmware.rs)(两份保持同步),
来源与文件列表见 [`firmware/README.md`](firmware/README.md)
清单、摘要与上游 pin 见 [`build.rs`](build.rs),来源与文件列表见
[`firmware/README.md`](firmware/README.md)

> 因此发布包可独立构建:`cargo publish` 校验 tarball 时会执行本 crate 的
> `build.rs` 自行准备固件,不依赖仓库根目录 `cargo xtask` 的预下载副作用
> `build.rs` 自行准备固件,不依赖仓库根目录的全局预下载副作用
## 依赖

Expand Down
7 changes: 3 additions & 4 deletions components/aic8800/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
//!
//! Resolution order for each blob (first hit wins):
//! 1. `$AIC8800_FIRMWARE_DIR/<name>` — explicit local cache / offline mirror.
//! 2. `components/aic8800/firmware/<name>` — the in-tree dir that
//! `cargo xtask` populates; used by normal in-repo (incl. offline) builds.
//! 2. `components/aic8800/firmware/<name>` — optional in-tree cache for
//! offline builds.
//! 3. download from the pinned upstream commit over HTTPS.
//!
//! Every blob is verified byte-for-byte against its pinned SHA-256 before being
Expand All @@ -19,7 +19,6 @@ use std::path::{Path, PathBuf};

/// Upstream firmware source: the repo referenced by the LicheeRV Nano
/// buildroot package `aic8800-sdio-firmware`, pinned to a fixed commit.
/// Keep this manifest in sync with `scripts/axbuild/src/firmware.rs`.
const FIRMWARE_REPO: &str = "lxowalle/aic8800-sdio-firmware";
const FIRMWARE_COMMIT: &str = "c56f910044cc854d6c553bcb9a644f3bca5a4c38";

Expand Down Expand Up @@ -165,7 +164,7 @@ fn main() {
let env_dir = std::env::var("AIC8800_FIRMWARE_DIR")
.ok()
.map(PathBuf::from);
// In-tree dir that `cargo xtask` populates (present for in-repo builds).
// Optional in-tree cache for offline builds.
let in_tree = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join("firmware");

for file in FIRMWARE_FILES {
Expand Down
11 changes: 5 additions & 6 deletions components/aic8800/firmware/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,11 @@ repository.

## Provisioning

The blobs are fetched on demand by the build tooling and verified byte-for-byte
against pinned SHA-256 digests before use. Any `cargo xtask starry ...` or
`cargo xtask clippy ...` invocation that compiles the `aic8800` crate downloads
them into this directory automatically. See
[`scripts/axbuild/src/firmware.rs`](../../../scripts/axbuild/src/firmware.rs)
for the file manifest, digests, and source pin.
The crate build script resolves the blobs on demand and verifies them
byte-for-byte against pinned SHA-256 digests before writing them to Cargo's
`OUT_DIR`. This directory is an optional local cache for offline builds; put
verified blobs here, or set `AIC8800_FIRMWARE_DIR` to an external cache. See
[`../build.rs`](../build.rs) for the file manifest, digests, and source pin.

## Source

Expand Down
2 changes: 1 addition & 1 deletion components/aic8800/src/fw/firmware/data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
//!
//! 所有固件文件通过 include_bytes!() 在编译时嵌入内核镜像。
//! 固件 blob 由 `build.rs` 准备到 `OUT_DIR/firmware/`(来源优先级:
//! `$AIC8800_FIRMWARE_DIR` → 仓库内 `firmware/`(xtask 预下载)→ 上游下载),
//! `$AIC8800_FIRMWARE_DIR` → 仓库内 `firmware/`(可选本地缓存)→ 上游下载),
//! 每个文件均按 SHA-256 校验,因此 blob 不必随源码/发布包分发。
//!
//! 运行时通过 get_firmware_set() 根据芯片型号和版本选择正确的固件组合。
Expand Down
4 changes: 2 additions & 2 deletions docs/docs/build/arceos/overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ cargo xtask arceos <subcommand> [options]

## 特有行为

### `--package` 必需
### QEMU 默认 Hello World

ArceOS 把每个可运行的应用建模为 workspace 内的独立 crate(如 `apps/arceos/arceos-httpserver`)。与 StarryOS 的"一次编译整个内核"不同,ArceOS 的构建目标必须由 `--package` 显式锁定,否则报错。`--package` 会被写入 Snapshot,后续短命令(如 `cargo arceos qemu`)会自动复用
ArceOS 把每个可运行的应用建模为 workspace 内的独立 crate(如 `apps/arceos/arceos-httpserver`)。`build`、`uboot` 和 `board` 仍需通过 `--package` 或已有 Snapshot/配置选择应用;仅 `qemu` 在没有 `--package` 与 `--config` 时读取 `board/qemu-<arch>.toml`,默认运行 `arceos-helloworld`。`--package` 和 `--config` 始终优先于这个 QEMU 默认值

### 动态平台固定启用

Expand Down
13 changes: 3 additions & 10 deletions docs/docs/build/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ pub struct BuildInfo {
| 字段 | 默认值 | 说明 |
|------|--------|------|
| `env` | `{}` | 默认不注入额外环境变量;网络地址等需要由具体 build config 或子系统配置显式提供 |
| `features` | `["ax-std"]` | 最小 feature |
| `features` | `[]` | 不补充应用 feature;应用和 build config 自行声明所需能力 |
| `log` | `Warn` | 默认日志级别 |
| `max_cpu_num` | `None` | 不限制(单核) |

Expand All @@ -216,15 +216,9 @@ pub struct BuildInfo {
- `max_cpu_num`:值为 0 时报错(必须大于 0)
- 旧 `plat_dyn` 字段:已移除,配置中出现该字段会报错

### Axvisor x86 虚拟化后端检测
### Axvisor x86 虚拟化后端

Axvisor 在 x86_64 架构上需要虚拟化后端 support(Intel VMX 或 AMD SVM)。`axvisor/build/x86.rs` 中的 `normalize_backend_features()` 负责自动检测或验证:

1. **已显式指定**:若 features 中包含 `vmx` 或 `svm`,直接使用(两者同时存在则报错)
2. **未指定时自动检测**:通过 CPUID 读取宿主 CPU 厂商信息:
- `GenuineIntel` → `vmx`
- `AuthenticAMD` → `svm`
3. **环境变量覆盖**:设置 `AXVISOR_X86_BACKEND=vmx|intel|svm|amd` 跳过 CPUID 检测
Axvisor 的 x86_64 build config 应在 `features` 中选择后端:Intel 使用 `vmx`,AMD 使用 `svm`。当前 axbuild 为兼容未迁移的通用 QEMU 配置,缺少后端时临时补充 `vmx`;显式配置 `svm` 时保持不变,同时配置两个后端仍会报错。待 Axvisor 不再依赖这两个 Cargo feature 后,应删除该兼容逻辑。

### 加载流程

Expand Down Expand Up @@ -301,7 +295,6 @@ axbuild 在编译期和运行时使用多个环境变量,分布在配置、运
| `STARRY_APK_REGION` | `china` | StarryOS APK 镜像源区域:`china`/`cn`(`mirrors.cernet.edu.cn`)或 `us`/`usa`(`dl-cdn.alpinelinux.org`) |
| `TGOS_IMAGE_LOCAL_STORAGE` | `<workspace>/tmp/axbuild/rootfs` | TGOS 镜像本地存储路径(覆盖 `ImageConfig.local_storage`,影响 `cargo xtask image` 与所有子系统的 rootfs 拉取) |
| `TGOS_IMAGE_REGISTRY_FALLBACK_URL` | `.../rcore-os/tgosimages/.../v0.0.6.toml` | TGOS 镜像注册表的 fallback URL(当 `default.toml` 拉取失败时使用) |
| `AXVISOR_X86_BACKEND` | — | Axvisor x86_64 虚拟化后端强制选择:`vmx`/`intel` 或 `svm`/`amd`(跳过 CPUID 自动检测) |
| `AXLOADER_X86_64_UEFI_FIRMWARE` | — | axloader HTTP smoke test 优先使用的 OVMF 固件路径(仅 `cargo xtask axloader test qemu`) |
| `AXVISOR_X86_64_UEFI_FIRMWARE` | — | axloader HTTP smoke test 的兼容旧变量;Axvisor UEFI CI 也会用它向 `setup_qemu.sh` 传递 OVMF 路径 |
| `AXBUILD_KEEP_QEMU_LOG` | — | 设为非空保留 QEMU 运行日志(用于 backtrace 符号化后的事后分析) |
Expand Down
6 changes: 2 additions & 4 deletions docs/docs/development/arceos.md
Original file line number Diff line number Diff line change
Expand Up @@ -287,14 +287,12 @@ version = "0.1.0"
edition.workspace = true

[features]
default = []
arceos = ["dep:ax-std"]
default = ["arceos"]
arceos = ["dep:ax-std", "ax-std/arceos"]

[dependencies]
ax-std = { workspace = true, optional = true }

[package.metadata.axstd]
features = ["log-level-debug"]
```

**3) `src/main.rs`**
Expand Down
27 changes: 15 additions & 12 deletions docs/docs/quickstart/arceos.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,52 +6,55 @@ title: "ArceOS 快速上手"

# ArceOS 快速上手

ArceOS 的最短路径通常是选择一个示例包,通过 `cargo xtask arceos qemu` 直接构建并启动
ArceOS 的最短路径是直接运行 `cargo xtask arceos qemu`。该 QEMU 子命令会选择对应架构的 board 模板,默认启动 Hello World

```mermaid
flowchart LR
A[选择包] --> B[选择架构]
B --> C[cargo xtask arceos qemu]
C --> D{验证通过?}
D -- 是 --> E[测试套件]
D -- 否 --> F[检查环境]
F --> B
A[选择架构] --> B[cargo xtask arceos qemu]
B --> C{需要其他应用?}
C -- 否 --> D[Hello World]
C -- 是 --> E[--package 指定应用]
D --> F{验证通过?}
E --> F
F -- 是 --> G[测试套件]
F -- 否 --> H[检查环境]
H --> A
```

## 1. 快速启动

本节给出 ArceOS 在不同架构上的最短启动命令。推荐优先选择 `arceos-helloworld`,因为它依赖最少、输出最直接,适合确认基础构建链路和 QEMU 路径是否正常
不带 `--package` 时,QEMU 子命令从 `os/arceos/configs/board/qemu-<arch>.toml` 读取默认应用与 feature;当前模板使用最小的 `arceos-helloworld`。需要运行其他应用时,再通过 `--package` 显式覆盖

### 1.1 RISC-V 64

`riscv64` 是当前最适合作为第一条验证路径的架构之一。命令短、反馈明确,也最便于和测试套件中的主流验证路径对应起来。

```bash
cargo xtask arceos qemu --package arceos-helloworld --target riscv64gc-unknown-none-elf
cargo xtask arceos qemu --target riscv64gc-unknown-none-elf
```

### 1.2 AArch64

如果后续工作会涉及 StarryOS 或 Axvisor,AArch64 路径会更容易和其他系统对齐。它适合在完成第一条最小运行路径后继续验证。

```bash
cargo xtask arceos qemu --package arceos-helloworld --target aarch64-unknown-none-softfloat
cargo xtask arceos qemu --target aarch64-unknown-none-softfloat
```

### 1.3 x86_64

`x86_64` 更适合本地 x86 平台适配或与 PC 类平台环境对照时使用。启动方式与其他架构一致,主要差别在目标 triple 和底层平台配置。

```bash
cargo xtask arceos qemu --package arceos-helloworld --target x86_64-unknown-none
cargo xtask arceos qemu --target x86_64-unknown-none
```

### 1.4 LoongArch64

LoongArch64 路径适合作为补充验证,而不是第一次上手的默认首选。使用前建议先确认本地环境或容器环境中对应 QEMU 已可用。

```bash
cargo xtask arceos qemu --package arceos-helloworld --target loongarch64-unknown-none-softfloat
cargo xtask arceos qemu --target loongarch64-unknown-none-softfloat
```

## 2. 常用包
Expand Down
Loading
Loading