跳到主要内容

构建配置与设备选择

Cargo feature 决定链接哪些能力、硬件核心和探测模块;平台描述决定目标机器上实际可发现哪些设备;运行时决定已注册设备能否满足执行与资源约束。这三个条件缺一不可。feature 的事实来源是 drivers/ax-driver/Cargo.toml,不是历史设备支持列表。

1. 配置层次

ax-driver 的默认 feature 集合为空。启用领域能力不等于启用某个具体驱动,启用具体驱动也不等于创建实例。模块级 cfg、注册宏和最终链接器注册项共同决定可执行的 probe 集合。

1.1 能力与平台来源

基础 feature 表达领域依赖,rdrive::init_sources() 表达平台发现来源。Static、FDT、ACPI 不是用于选择一组旧平台私有驱动类型的 feature。

feature主要作用不负责的工作
block块能力与 OS 绑定扫描分区或挂载文件系统
netrd-net、同步依赖与网络绑定创建队列和协议任务
displayrdif-display 绑定自动选择已验证显示硬件
inputrdif-input 绑定生成用户态输入设备节点
vsockrdif-vsock 绑定物理网卡发现
pciPCIe、MSI 相关能力与探测保证平台一定提供 root complex
usb引入 crab-usb自动完成设备枚举
serial串口能力及实现依赖选择所有平台的固定控制台

IRQ binding 解析属于基础资源适配,不存在要求调用方额外启用 ax-driver/irq 才能解析的通用开关。

1.2 镜像与运行实例

os/arceos/modules/axruntime/src/registers.rs 装载链接器注册项;devices.rs 在探测之后接管设备。相同镜像在不同 FDT 或 ACPI 环境中可以得到不同设备集合。

匹配失败与运行时启动失败处于不同阶段。增加 feature 只能解决驱动未链接的问题,不能修复错误 IRQ 路由、缺失时钟或 DMA 地址限制。

2. 硬件 feature

具体硬件开关组合领域能力、核心实现和总线依赖。别名保留的是配置名称兼容性,不表示多了一条独立实现路径。

2.1 网络与 VirtIO

VirtIO 网络、显示、输入和 socket 开关都组合 virtiopcivirtiovirtio-core 的别名。不能凭命名惯例编造当前 Cargo 文件没有定义的 virtio-gpu-mmiovirtio-gpu-pci feature。

feature关键依赖或组合
virtio-netnetvirtiopci、同步能力
virtio-gpudisplayvirtiopci
virtio-inputinputvirtiopci
virtio-socketvsockvirtiopci
ls2k1000-gmacnet 与同步能力
fxmacnetfxmac_rs、分配及接口适配
intel-netnetpcieth-intel
realtek-rtl8125netpci、对应硬件核心
aic8800-wifinetaic8800/rdif、SDIO host 及认证算法依赖

aic8800-wifi 中的 dep:cv181x-sdhci 是可选依赖启用语法,不等于启用同名块设备 feature。sdmmc-protocol/sdio 从 AIC 的依赖关系引入,不能将 Wi-Fi 路径解释成先创建一块 SD 磁盘。

2.2 块设备

当前 Cargo 文件公开 AHCI、NVMe 和多种 SD/MMC 控制器 feature。公开入口仅证明可选择该实现,不能据此宣称已经完成所有板卡和写入组合验证。

feature主要路径
ahci块能力、PCI、ahci-driver
ahci-fdt块能力与 ahci-driver,不强制 PCI
ls2k1000-ahciahci-fdt 别名
nvme块能力、PCI、nvme-driver
rockchip-sdhciRockchip 资源、sdhci-host、SD/MMC 协议
cv181x-sdhciCV181x host、sdhci-host、SD/MMC 协议
cvsdcv181x-sdhci 别名
k230-sdhciSDHCI host 与 SD/MMC 协议
phytium-mciphytium-mci-host 与 SD/MMC 协议
rockchip-dwmmcRockchip 资源、SCMI、DWMMC host 与协议
starfive-jh7110-dwmmcStarFive 资源、DWMMC host、协议及 SDIO 支持

硬件队列数量、提交批次和 IRQ 合同由实际控制器实现给出,不由 feature 个数决定。公开入口与硬件验证记录分开维护,不能由前者推导后者。

2.3 USB 与 SoC 设备

USB transport 开关和 SoC 初始化开关可明确区分,DWC3 路径还需要 PHY、时钟、复位及 GRF 资源。

feature关键组合
xhci-mmiousb
xhci-pciusbpci
rockchip-dwc-xhciusbrockchip-socrockchip-pm
rockchip-ehciusb、Rockchip SoC 和电源依赖
sg2002-dwc2usbsg200x-bsp
rk3588-pciePCI、Rockchip 资源、rk3588-pci
rk3588-pwmRockchip 资源、PWM 能力与实现
rknpurgajpeg对应加速核心与 Rockchip 资源

rockchip-socrockchip-pm 引入的依赖不意味着每个资源都由使用它的 probe 自动启用;具体操作仍由回调和平台资源提供者实现。

3. 构建工具与验证边界

系统配置经过构建工具转换后才成为 Cargo 参数。应用能力名、带软件包前缀的 feature 和旧平台开关不能混用。

3.1 配置映射

scripts/axbuild/src/arceos/cbuild/features.rs 处理 C 应用 feature 映射,scripts/axbuild/src/build/platform.rs 处理平台相关配置,std_build.rs 处理标准构建路径。ax-driver/virtio-net 是显式软件包 feature,与上层 net 能力具有不同含义。

映射层负责配置名称和构建输入,不验证设备树中是否存在对应节点。构建成功后没有注册对象,需要继续核对最终注册项与平台匹配,而不是直接归因于上层协议初始化。

3.2 支持证据

配置支持、编译支持、启动支持和数据完整性验证应分开记录。尤其块设备写入、DMA 一致性和多核 IRQ 亲和需要对应目标的运行证据,不能由源码中出现 feature 推导。

资源约束由平台资源定义,执行与停止条件分别由运行时与完成生命周期定义。驱动实现按项目 cargo xtask 入口验证实际受影响的功能组合,构建参数需要与目标设备描述一致。迁移旧配置的行为差异由迁移约束说明。

4. 实现与注册对应

feature 选择依赖,注册模块选择实际 probe。硬件核心与绑定可能在不同目录,也可能处于同一文件,不能仅从软件包名称推导完整接入链。

4.1 平台与领域入口

drivers/ax-driver/src/usb/dwc.rs 绑定 Rockchip DWC3 资源,drivers/usb/usb-host/src/backend/kmod/ 保存 USB 核心和后端;drivers/serial/some-serial/ 保存串口实现,运行时位于 os/arceos/modules/axruntime/src/serial/。块接管位于 drivers/ax-driver/src/block/binding.rs,运行时与卷在 fs/ax-fs-ng/

显示输入使用各自 rdif 能力与 ArceOS 包装,没有独立 runtime crate 也不表示缺少运行时职责。

4.2 网络硬件绑定

网络实现同样以 feature、核心及 probe 三者对应,保留具体实现路径便于验证配置,不作为独立的架构分类。

实现核心或适配位置平台绑定
VirtIO-netdrivers/ax-driver/src/virtio/net.rs同文件传输构造与 probe
Intel E1000drivers/net/eth-intel/src/e1000/mod.rsdrivers/ax-driver/src/net/intel.rs
RTL8125drivers/net/realtek-rtl8125/src/lib.rsdrivers/ax-driver/src/net/realtek.rs
Phytium Fxmacdrivers/ax-driver/src/net/fxmac.rs同文件包装 fxmac_rs
Loongson GMACdrivers/ax-driver/src/net/loongson_gmac.rsls2k1000-gmac feature
AIC8800drivers/net/aic8800/src/rdif/device/endpoints/device.rsdrivers/ax-driver/src/net/aic8800/

该表证明源码和配置入口,不表示所有板卡、多核亲和和 DMA 组合都已经完成运行验证。