ax-plat-aarch64-bsta1000b
路径:
platforms/ax-plat-aarch64-bsta1000b类型:库 crate 分层:组件层 / AArch64 板级平台包 版本:0.3.1-pre.6文档依据:当前仓库源码、Cargo.toml、README.md、axconfig.toml、src/boot.rs、src/init.rs、src/serial.rs、src/mem.rs、src/power.rs、src/mp.rs、src/misc.rs
ax-plat-aarch64-bsta1000b 是 Black Sesame A1000B SoC 在 axplat 体系里的具体板级实现。它把 A1000B 的启动入口、早期页表、固定地址空间、PSCI 多核拉起、GIC/Generic Timer 接线以及本地 DesignWare APB UART 控制台组织成一组 axplat 接口,使上层内核能够按统一平台契约完成 bring-up。它不是通用 AArch64 外设库,也不是完整驱动栈;它解决的是“这块板子怎样从裸机入口走到 ax_plat::call_main(),并把最小可运行平台能力交给上层”的问题。
架构设计
1.1 真实定位
这个 crate 在 A1000B 平台栈中的位置可以概括为:
- 向下依赖
ax-cpu提供 EL 切换、MMU 打开、trap 初始化和缓存/停机等 CPU 原语。 - 横向复用
ax-plat-aarch64-peripherals提供的 PSCI、Generic Timer 和 GIC glue。 - 自己补上 A1000B 特有的启动代码、内存布局、CPU 硬件 ID 列表,以及非 PL011 的 DesignWare APB UART 控制台实现。
- 向上实现
InitIf、MemIf、PowerIf,并通过TimeIf/IrqIf宏展开接入axplat。
这意味着它的核心工作不是“定义抽象”,而是“把板级事实落成 axplat 的实现”:
- A1000B 的 RAM 和 MMIO 地址来自
axconfig.toml,不是运行时探测。 - 早期页表只负责把 CPU 带进 Rust 世界,不负责最终内核页表策略。
- 设备地址、IRQ 号和 CPU 硬件 ID 已经在配置里写死,当前实现并不依赖设备树完成硬件发现。
模块结构
| 模块 | 作用 | 关键内容 |
|---|---|---|
lib.rs | crate 根与 glue 汇总 | config 生成、包名校验、TimeIf/IrqIf 宏接入 |
boot | 最早期引导 | Linux 风格 ARM64 镜像头、主核/次核入口、引导页表、MMU 打开 |
init | InitIf 实现 | trap、PSCI、UART、Generic Timer、GIC 的初始化顺序 |
serial | 本地控制台实现 | ConsoleIf 落地、UART 初始化、可选 UART IRQ 使能 |
mem | MemIf 实现 | RAM/MMIO 区间、线性映射、地址空间边界 |
power | PowerIf 实现 | system_off()、cpu_boot()、cpu_num() |
mp | 次核启动 | 基于 PSCI cpu_on() 的次核拉起路径 |
misc | 板级复位辅助 | QSPI/CPU reset、bootmode 读取,但当前未接到 PowerIf |