Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
a6ba367
Implement GPT and MBR partition scanning and volume management
ZR233 May 26, 2026
70f6424
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 26, 2026
e06f1df
fix: update dependencies in Cargo.lock and add mmio-api
ZR233 May 26, 2026
a260430
feat: refactor IRQ handling by introducing SharedDriver for better sa…
ZR233 May 26, 2026
bf92f02
Refactor NVMe and RamDisk block drivers to separate read and write qu…
ZR233 May 26, 2026
dccc6f0
Refactor feature flags in TOML configuration files
ZR233 May 26, 2026
58d8889
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 26, 2026
8a437b5
fix(deps): update jiff and jiff-static to version 0.2.26 and add depe…
ZR233 May 26, 2026
e7f178f
feat(tests): add NVMe rootfs read/write tests for multiple architectu…
ZR233 May 26, 2026
1f68260
feat(tests): add QEMU configuration files for multiple architectures …
ZR233 May 27, 2026
b9c8b51
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
97cfbd2
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
694c9cd
fix(starry): restore OrangePi list-devices feature
ZR233 May 27, 2026
6a5eb3a
fix(ax-driver): gate OS glue for host tests
ZR233 May 27, 2026
6ec30e3
fix(ax-driver): restore rtc feature entry
ZR233 May 27, 2026
b93dabc
fix(ax-driver): gate bare-metal glue by feature
ZR233 May 27, 2026
8f98285
fix(ax-driver): expose block and net binding features
ZR233 May 27, 2026
1aa0cbf
fix(ax-driver): sync block read DMA buffers
ZR233 May 27, 2026
2a13cc9
fix(sdhci-host): clear cached irq status for new commands
ZR233 May 27, 2026
9a9870b
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
175256f
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
340a066
fix(starry): stabilize DHCP qemu CI test
ZR233 May 27, 2026
cd0066e
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
2c66405
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
8afc97f
fix(starry): tolerate apk-curl mirror outages
ZR233 May 27, 2026
b43cdad
fix(starry): avoid dynamic curl installs in apk-curl
ZR233 May 27, 2026
5c363f8
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
78678c3
fix(starry): preinstall inotifywait test tool
ZR233 May 27, 2026
32792d4
ci: avoid PR diff API in path filter
ZR233 May 27, 2026
b5493f8
fix(starry): skip apk-curl before mirror fetch without curl
ZR233 May 27, 2026
905ca43
fix(starry): install inotifywait via host cmake phase
ZR233 May 27, 2026
cd96ba6
fix(starry): extend loongarch util-linux timeout
ZR233 May 27, 2026
37f418c
fix(starry): preinstall procps test tools
ZR233 May 27, 2026
6ae025c
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
9d90b59
chore(ci): refresh pr merge status
ZR233 May 27, 2026
4d94daf
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 27, 2026
a05f66c
fix(starry-kernel): enable dynamic usbfs dependencies
ZR233 May 27, 2026
2544262
fix(starry): stabilize nonblocking TCP bugfix test
ZR233 May 27, 2026
413ac55
fix(starry): autorun grouped qemu tests
ZR233 May 27, 2026
8c89922
fix(starry): bound zombie bugfix synchronization
ZR233 May 27, 2026
37574fd
fix(arceos): stabilize remote wait queue test
ZR233 May 27, 2026
8c94ae9
fix(starry): isolate zombie bugfix tests
ZR233 May 27, 2026
6d0e0e7
fix(starry): prebuild lua test packages
ZR233 May 27, 2026
da6c8d6
fix(starry): isolate tty bugfix tests
ZR233 May 27, 2026
4f92e94
fix(starry): bound busybox nologin test
ZR233 May 27, 2026
b6083bd
fix(starry): bound apt package test
ZR233 May 27, 2026
8259911
fix(arceos): register pthread before entry
ZR233 May 27, 2026
75638b0
fix(starry): raise aarch64 util-linux timeout
ZR233 May 27, 2026
6ff66b2
fix(ci): keep clippy incremental for local workspace deps
ZR233 May 27, 2026
8649d36
fix(starry): raise riscv64 util-linux timeout
ZR233 May 27, 2026
e063c36
fix(starry): stabilize grouped qemu cases
ZR233 May 27, 2026
818671f
refactor(tests): update timeout and success/failure handling in QEMU …
ZR233 May 28, 2026
1e7d4e5
Add APK add filesystem and network equivalence tests
ZR233 May 28, 2026
d62fb8f
feat(dhcp): add QEMU DHCP test cases and configurations for multiple …
ZR233 May 28, 2026
73a68ed
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 28, 2026
9363dff
feat(block): enhance read/write operations with batch processing and …
ZR233 May 28, 2026
0ddef9d
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 28, 2026
d1c357c
feat(rdif-block): add transfer planner and request validation
ZR233 May 28, 2026
a33de28
fix(ax-plat-x86-pc): keep virtio net on firmware IRQ line
ZR233 May 28, 2026
1ee9ebc
Merge remote-tracking branch 'up/dev' into rfct/blk
ZR233 May 28, 2026
d579846
refactor(rdif-block): narrow transfer planner API
ZR233 May 28, 2026
02189f9
refactor(rdif-block): split modules and slim queue contract
ZR233 May 28, 2026
0dcb3e2
refactor(rdif-block): remove queue config and topology
ZR233 May 28, 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
2 changes: 1 addition & 1 deletion .claude/skills/cross-kernel-driver/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ For nontrivial driver design or refactoring, read `references/architecture.md` b

Use `&mut self` APIs where exclusive access is the natural contract. Do not require callers to provide an OS lock as part of the portable abstraction.

For block-device integration in `axplat-dyn`, wrap the portable driver with `rd_block::Interface` and `rd_block::IQueue`, then register it through the existing `PlatformDeviceBlock::register_block` path. Keep `rd-block`/`rdrive` adapter code in platform glue or behind an explicit adapter feature unless the crate's purpose is to expose that interface.
For block-device integration in ArceOS, expose portable block drivers through `rdif_block::Interface` and `rdif_block::IQueue`. Keep queue creation, DMA/wait policy, and IRQ registration in OS glue/runtime layers; the portable boundary should be submit/poll requests plus `handle_irq() -> Event`.

Prefer small interfaces:

Expand Down
19 changes: 10 additions & 9 deletions .claude/skills/cross-kernel-driver/references/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,15 @@ Runtime/platform integration belongs elsewhere:
- `platform/axplat-dyn/src/drivers/soc/<vendor>/...` for SoC platform glue.
- `components/axdriver_crates/axdriver_<type>` for common ArceOS-facing driver traits/adapters.

For block devices in `axplat-dyn`, the existing integration path is:
For block devices in `axplat-dyn`, the integration path is:

- probe/FDT/MMIO setup in `platform/axplat-dyn/src/drivers/blk/<driver>.rs`
- wrap the portable driver in an `rd_block::Interface`
- expose a queue as `rd_block::IQueue`
- register through `PlatformDeviceBlock::register_block`, which creates `rd_block::Block::new(dev, &DmaImpl)` and registers it with `rdrive`
- expose the portable driver as `rdif_block::Interface`
- expose queues as `rdif_block::IQueue` with `submit_request()` / `poll_request()`
- register boxed `rdif_block::Interface` devices through the ArceOS driver glue and `rdrive`
- keep ArceOS sync block reads/writes, DMA bounce buffers, and IRQ registration policy above the portable interface

Keep `rd-block`/`rdrive` coupling in this adapter layer or behind an explicit adapter feature. Portable driver core should not need to know how `rdrive` probes or registers devices.
Keep `rdrive` coupling in this adapter layer or behind an explicit adapter feature. Portable driver core should not need to know how `rdrive` probes or registers devices.

## Dependency Boundaries

Expand Down Expand Up @@ -172,11 +173,11 @@ Runtime wrappers can then choose:

Avoid a single global `Driver::poll` if the hardware naturally exposes multiple queues or engines. Avoid a "big object + big lock + callbacks" shape unless the device is truly that simple.

For a block queue adapter, align portable queue state with `rd_block::IQueue`:
For a block queue adapter, align portable queue state with `rdif_block::IQueue`:

- `buff_config()` should expose block-size, alignment, and DMA mask constraints.
- `submit_request()` should allocate/map DMA buffers, program descriptors, and return a request id.
- `poll_request()` should check completion and translate device status into `rd_block::BlkError` in the adapter.
- `buffer_config()` should expose block-size, alignment, and DMA mask constraints.
- `submit_request()` should program descriptors and return a request id without installing OS wakeups.
- `poll_request()` should check completion and return `RequestStatus::Pending` or `RequestStatus::Complete`.
- Keep descriptor ownership and DMA map/unmap pairing explicit for each request id.

## Concurrency Rules
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ jobs:
uses: dorny/paths-filter@v4
with:
base: ${{ github.event_name == 'push' && github.ref || '' }}
token: ""
filters: |
ci_checks:
- ".cargo/**"
Expand Down
43 changes: 6 additions & 37 deletions Cargo.lock

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

2 changes: 0 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -271,8 +271,6 @@ riscv_vplic = { version = "0.4.12", path = "virtualization/riscv_vplic" }
nvme-driver = { version = "0.4.2", path = "drivers/blk/nvme-driver" }
pcie = { version = "0.6.1", path = "drivers/pci/pcie" }
ramdisk = { version = "0.1.1", path = "drivers/blk/ramdisk" }
rd-block = { version = "0.1.2", path = "drivers/blk/rd-block" }
rd-block-volume = { version = "0.1.0", path = "drivers/blk/rd-block-volume" }
rd-net = { version = "0.1.1", path = "drivers/net/rd-net" }
rdif-base = { version = "0.8.1", path = "drivers/interface/rdif-base" }
rdif-block = { version = "0.7.1", path = "drivers/interface/rdif-block" }
Expand Down
22 changes: 14 additions & 8 deletions docs/docs/architecture/rdrive-rdif.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ sidebar_label: "rdrive + rdif 驱动框架"

# rdrive + rdif 驱动框架

本文记录 #606 的宿主物理设备重构目标。新的设备路径硬切到 `rdrive + rdif`:`rdrive` 负责发现、probe、注册和查询,`rdif-*` / `rd-*` 负责能力接口和运行时封装,上层系统按领域能力消费设备。旧驱动接口包组已移除,宿主物理设备初始化与交付主线不再经过 legacy driver crates。
本文记录 #606 的宿主物理设备重构目标。新的设备路径硬切到 `rdrive + rdif`:`rdrive` 负责发现、probe、注册和查询,`rdif-*` 负责能力接口,必要时由对应领域 crate 提供运行时封装,上层系统按领域能力消费设备。旧驱动接口包组已移除,宿主物理设备初始化与交付主线不再经过 legacy driver crates;块设备路径中原有 runtime 已删除,统一以 `rdif-block` 作为 block capability boundary

`axdevice` 与 `axdevice_base` 不纳入本轮迁移。它们继续作为 Axvisor / axvm 的 guest emulated device model,不参与宿主物理设备 probe,不作为 FS、NET、display、input、vsock 的设备来源。

Expand Down Expand Up @@ -51,7 +51,7 @@ flowchart TB
end

subgraph Capability["Capability Boundary"]
RdifBlock["rdif-block + rd-block"]
RdifBlock["rdif-block"]
RdifEth["rdif-eth + rd-net"]
RdifDisplay["rdif-display"]
RdifInput["rdif-input"]
Expand Down Expand Up @@ -161,17 +161,23 @@ sequenceDiagram

## Capability Boundary

`rdif-*` 是能力边界,只定义某类设备向上暴露什么能力,不负责设备发现、iomap、IRQ 注册、任务调度或系统启动顺序。`rd-*` 是 runtime wrapper,负责 waker、poll、blocking API、buffer pool 等运行时行为。
`rdif-*` 是能力边界,只定义某类设备向上暴露什么能力,不负责设备发现、iomap、IRQ 注册、任务调度或系统启动顺序。块设备已移除原 runtime crate,`rdif-block` 直接承载设备 LBA 语义的 submit/poll block capability boundary;其它领域如网络仍可按需保留 runtime wrapper,负责 waker、poll、blocking API、buffer pool 等运行时行为。

| 能力 | interface crate | runtime crate | 上层消费 |
| --- | --- | --- | --- |
| 块设备 | `rdif-block` | `rd-block` | block volume service、FS |
| 块设备 | `rdif-block` | 已删除,直接消费 `rdif-block` submit/poll 边界 | block volume service、FS |
| 网络设备 | `rdif-eth` | `rd-net` | net interface service、NET/NET-NG |
| 显示 | `rdif-display` | `rd-display` | display service、Starry fb |
| 输入 | `rdif-input` | `rd-input` | input service、Starry input |
| vsock | `rdif-vsock` | `rd-vsock` | vsock service |
| 平台设备 | `rdif-intc`、`rdif-pcie`、`rdif-clk`、`rdif-timer`、`rdif-systick`、`rdif-serial` | 按需 | HAL、Axvisor backend、平台 glue |

`rdif-block` 的块请求不暴露 Linux block layer 的 512B sector 公共单位,而使用真实设备的 `lba` / `block_count` / `logical_block_size`。OS glue 负责把上层 byte offset、FS block、Linux-like sector 或分区 region 转换成设备 LBA。接口保留 blk-mq 风格的结构能力:设备可报告 `QueueTopology`,OS 可创建一个或多个 queue,每个 queue 使用 queue-local `RequestId`/tag,经 `submit_request()` 提交、经 `poll_request()` 回收完成。

块 IRQ 事件按 source 和 queue 分离。`Interface::irq_sources()` 返回可用 IRQ source 列表,每个 `IrqSourceInfo { id, queues }` 描述该 source 可能影响的 queue mask;`take_irq_handler(source_id)` 只能取走对应 handler。单 INTx/legacy 设备使用 source `0`,未来 NVMe MSI-X 可以把不同 vector 暴露为不同 source。当前 ArceOS `ax-driver` / `ax-runtime` glue 仍只消费 legacy source `0`,保持一个 block 设备一个 IRQ handler 的注册方式。

`IrqHandler::handle_irq()` 只确认中断源并返回可 poll 的 queue mask,不做 OS wake、不阻塞、不持有 OS 锁,也不在中断上下文推进慢路径完成。收到事件后,runtime 或 task-side wrapper 再对相应 queue 调用 `poll_request()`。

新增接口按多文件拆分:

- `rdif-display/src/lib.rs` 只 re-export;`types.rs` 定义 `DisplayInfo`、`PixelFormat`、`FrameBuffer<'_>`;`error.rs` 定义 `DisplayError`;`interface.rs` 定义 `Interface` 和 `Event`。
Expand Down Expand Up @@ -229,9 +235,9 @@ IRQ 路径只返回稳定事件和唤醒等待方;不能在 IRQ handler 中执
| Driver Core | `drivers/<type>/<device>` | `no_std`、寄存器/队列/描述符、`mmio-api`、`dma-api` 小边界 | `ax-driver`、`ax-hal`、`axplat-dyn`、`rdrive::PlatformDevice` |
| Capability Boundary | `drivers/interface/rdif-*` | `rdif-base`、小型错误和事件类型 | 平台、runtime、任务调度 |
| OS Glue | `platforms/axplat-dyn/src/drivers/*` 或平台 crate | `rdrive::module_driver!`、FDT/PCI/Static probe、iomap、IRQ 注册、DMA op | 上层 FS/NET 策略 |
| Runtime | `drivers/*/rd-*` | `rdif-*`、waker、poll/blocking wrapper、buffer pool | probe、设备树、ACPI、平台选择 |
| Runtime | `drivers/*/rd-*`,块设备除外 | `rdif-*`、waker、poll/blocking wrapper、buffer pool | probe、设备树、ACPI、平台选择 |

Driver Core 只推进硬件状态机。OS Glue 将硬件实例包装成 `rdif-*::Interface` 后通过 `PlatformDevice::register(...)` 注册。Runtime wrapper 从 `rdif-*::Interface` 构建领域运行时对象,供服务层和上层模块使用。
Driver Core 只推进硬件状态机。OS Glue 将硬件实例包装成 `rdif-*::Interface` 后通过 `PlatformDevice::register(...)` 注册。除块设备外,Runtime wrapper 从 `rdif-*::Interface` 构建领域运行时对象,供服务层和上层模块使用;块设备服务直接基于 `rdif-block` 的 submit/poll 能力边界组织 volume 和文件系统入口

## 领域 Service 与上层消费

Expand Down Expand Up @@ -266,7 +272,7 @@ pub struct BlockVolume {

block volume 层负责:

- 从 `rd-block` / `rdif-block` 枚举 physical disk。
- 从 `rdif-block` 枚举 physical disk。
- 支持 GPT、MBR、raw disk。
- 产出稳定 volume metadata。
- 提供裁剪到 `BlockRegion` 的 block reader。
Expand Down Expand Up @@ -316,7 +322,7 @@ src/
| 文件 | 当前问题 | 拆分方向 |
| --- | --- | --- |
| `platforms/axplat-dyn/src/drivers/pci/rk3588.rs` | 单文件超过 600 行 | RC init、ATU/window、MSI/IRQ、config space、FDT glue |
| `platforms/axplat-dyn/src/drivers/blk/rockchip_sd.rs` | 单文件超过 600 行 | probe/FDT、clock/tuning、card init、rd-block adapter |
| `platforms/axplat-dyn/src/drivers/blk/rockchip_sd.rs` | 单文件超过 600 行 | probe/FDT、clock/tuning、card init、rdif-block adapter |
| `platforms/axplat-dyn/src/drivers/blk/mod.rs` | 容器、adapter、IRQ、FDT decode 混杂 | registry、adapter、irq、probe |
| `platforms/axplat-dyn/src/drivers/mod.rs` | 设备收集、iomap、DMA 混杂 | device collection、iomap、dma |

Expand Down
2 changes: 1 addition & 1 deletion docs/docs/components/crates/ax-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ graph LR
- `ax-config-macros`
- `ax-cpu`
- `rdrive`
- `rd-block`
- `rdif-block`
- `rdif-display`
- `rdif-input`
- 另外还有 `48` 个同类项未在此展开
Expand Down
6 changes: 3 additions & 3 deletions docs/docs/components/crates/ax-driver.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
`ax-driver` 负责把平台发现结果转成上层可消费的设备能力:

- 向下连接 FDT、PCI、VirtIO、SoC/板级驱动和 MMIO/DMA 能力。
- 向上通过 `rdrive` 注册表和 `rd-block`、`rd-net`、`rdif-display`、`rdif-input`、`rdif-vsock` 暴露设备。
- 向上通过 `rdrive` 注册表和 `rdif-block`、`rd-net`、`rdif-display`、`rdif-input`、`rdif-vsock` 暴露设备。
- 在 ArceOS、StarryOS、Axvisor 之间复用驱动 core,同时把 OS glue 限定在 probe、iomap、IRQ 注册和运行时适配层。

## 主要模块
Expand All @@ -29,13 +29,13 @@ graph LR
dma["dma-api / mmio-api / axklib"] --> ax_driver
concrete["virtio-drivers / pcie / board driver crates"] --> ax_driver
ax_driver --> rdrive["rdrive"]
rdrive --> rdif["rd-block / rd-net / rdif-*"]
rdrive --> rdif["rdif-block / rd-net / rdif-*"]
rdif --> upper["ax-fs / ax-net / ax-display / ax-input / starry-kernel"]
```

### 直接依赖

- `rdrive`、`rd-block`、`rd-net`、`rdif-*`:设备注册、查询和领域能力接口。
- `rdrive`、`rdif-block`、`rd-net`、`rdif-*`:设备注册、查询和领域能力接口。
- `dma-api`、`mmio-api`、`axklib`:DMA、MMIO 和内核映射能力边界。
- `virtio-drivers`、`pcie`、SoC/板级驱动 crate:具体硬件协议或平台 glue。
- `ax-alloc`、`ax-errno`、`ax-kspin` 等:分配、错误映射和同步路径。
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/components/crates/ax-feat.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ graph LR
- `ax-cpu`
- `ax-dma`
- `rdrive`
- `rd-block`
- `rdif-block`
- `rdif-display`
- `rdif-input`
- 另外还有 `48` 个同类项未在此展开
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/components/crates/ax-fs-ng.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ graph LR
- `ax-cpu`
- `ax-dma`
- `rdrive`
- `rd-block`
- `rdif-block`
- 另外还有 `37` 个同类项未在此展开

### 3.3 被依赖情况
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/components/crates/ax-hal.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ graph LR
- `ax-alloc`:在页表/虚拟化路径下承担帧或内存块来源。

### 间接依赖
- 各类驱动能力接口,如 `rdrive`、`rd-block` `rdif-*`,会通过平台与上层模块间接参与 bring-up。
- 各类驱动能力接口,如 `rdrive`、`rdif-block` 和其它 `rdif-*`,会通过平台与上层模块间接参与 bring-up。
- `ax-percpu`、`kernel_guard`、`memory_addr` 等基础组件通过 `ax-cpu`、`axplat` 或 `paging` 路径提供底层支持。

### 3.3 关键直接消费者
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/components/crates/ax-runtime.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ graph LR
- `ax-cpu`
- `ax-dma`
- `rdrive`
- `rd-block`
- `rdif-block`
- `rd-net`
- `rdif-display`
- 另外还有 `43` 个同类项未在此展开
Expand Down
12 changes: 6 additions & 6 deletions docs/docs/components/crates/axplat-dyn.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

- 向下:依赖 `somehal` 提供的入口宏、内存映射、控制台、时钟、中断、电源和 CPU 元数据。
- 向上:实现 `InitIf`、`ConsoleIf`、`MemIf`、`TimeIf`、`PowerIf` 以及可选 `IrqIf`,并通过 `ax_plat::call_main()` / `call_secondary_main()` 把控制权交给内核入口。
- 向旁:公开 `drivers` 模块,为 `ax-driver` 的 `dyn` 设备模型提供基于 `rdrive` 的设备探测与块设备封装。
- 向旁:公开 `drivers` 模块,为 `ax-driver` 的 `dyn` 设备模型提供基于 `rdrive` 和 `rdif-block` 的设备探测与块设备封装。
- 向链接层:通过 `build.rs` 生成 `axplat.x`,把 `linkme` 段、异常表和若干 ArceOS 约定符号补进最终镜像。

这决定了它与普通板级包的一个根本差异:
Expand Down Expand Up @@ -46,7 +46,7 @@
| --- | --- | --- | --- |
| 启动 glue | `somehal` | `boot.rs` | 把主核/次核入口收敛到 `ax_plat::call_main()` / `call_secondary_main()` |
| 平台契约 glue | `axplat` | `init.rs`、`console.rs`、`mem.rs`、`generic_timer.rs`、`irq.rs`、`power.rs` | 用 `#[impl_plat_interface]` 把 `somehal` 能力接到 `axplat` trait |
| 设备 glue | `rdrive`、`rd-block`、`ax-driver` | `drivers/*` | 把 FDT/PCIe/VirtIO 探测结果转成 `rdrive` 可查询的动态块设备 |
| 设备 glue | `rdrive`、`rdif-block`、`ax-driver` | `drivers/*` | 把 FDT/PCIe/VirtIO 探测结果转成 `rdrive` 可查询的动态块设备 |
| 链接 glue | `build.rs`、`link.ld` | crate 根目录 | 生成 `axplat.x`,插入所需段和符号,适配 ArceOS 链接约定 |

这套装配方式说明它承担的是“桥接与接线”职责,而不是“重新定义平台抽象”。
Expand Down Expand Up @@ -132,13 +132,13 @@ flowchart TD
2. 调用 `rdrive::probe_all(true)` 触发探测。
3. `drivers/pci.rs` 通过 `module_driver!` 注册通用 PCIe ECAM 控制器探测器。
4. `drivers/blk/virtio.rs` 通过 `module_driver!` 注册 `virtio,mmio` block 设备探测器。
5. 探测出的 `rd_block::Block` 被包成实现 `ax_driver_block::BlockDriverOps` 的 `Block`,最终进入 `BLOCK_DEVICES`。
5. 探测出的 `rdif_block::Interface` 设备被包成实现 `ax_driver_block::BlockDriverOps` 的 `Block`,最终进入 `BLOCK_DEVICES`。
6. `drivers/ax-driver/src/dyn_drivers/mod.rs` 再通过 `take_block_devices()` 把它们取走,转成 `ax-driver` 的动态设备集合。

```mermaid
flowchart TD
A[rdrive::probe_all] --> B[PCIe / VirtIO probe modules]
B --> C[rd_block::Block]
B --> C[rdif_block::Interface]
C --> D[drivers::blk::Block]
D --> E[BLOCK_DEVICES]
E --> F[ax-driver::dyn_drivers::probe_all_devices]
Expand Down Expand Up @@ -197,7 +197,7 @@ flowchart TD
| `ax-cpu` | 在 `hv` 等场景提供 CPU 模式支持 |
| `axklib` | 提供 `iomap()` 等内核内存映射辅助 |
| `ax-driver` | 提供共享驱动 probe 与 adapter 入口 |
| `rdrive`、`rd-block` | 提供运行时设备探测与块设备抽象 |
| `rdrive`、`rdif-block` | 提供运行时设备探测与块设备能力边界 |
| `dma-api` | 为设备 DMA 提供抽象接口 |
| `heapless`、`spin` | 用于固定容量缓存与锁/一次初始化结构 |

Expand All @@ -213,7 +213,7 @@ flowchart TD
graph TD
A[somehal / ax-cpu / axklib] --> B[axplat-dyn]
C[axplat] --> B
D[rdrive / rd-block / dma-api / ax-driver] --> B
D[rdrive / rdif-block / dma-api / ax-driver] --> B

B --> E[ax-hal: plat-dyn]
B --> F[ax-driver: dyn]
Expand Down
Loading