领域服务与系统交付
领域服务把驱动能力转换为系统需要的块区域、字节流、帧端口、显示输入接口、连接或设备树。服务是职责划分,不意味着每类设备都存在独立的 rd-* 软件包,也不要求普通业务请求反复查询注册表。
1. 交付边界
设备管理负责发现和身份,运行时负责执行与完成,服务层负责可消费对象及领域状态。三者可能位于同一 crate,但不能混用职责。
1.1 交付物
交付物隐藏哪些硬件细节取决于能力形态。provider 消费方本来就是平台层,而普通文件或协议调用不应接触设备寄存器。
| 能力 | 交付对象 | 主要消费方 |
|---|---|---|
| 块设备 | 块句柄、BlockVolume、区域读写视图 | 文件系统与根卷选择 |
| 串口 | 字节输入、发送入口、控制台输出 | 终端、控制台与日志 |
| 网络 | EthernetFramePort、协议及控制状态 | socket 与网络系统接口 |
| 显示 | DisplayDevice 与帧缓冲信息 | 显示模块及用户态适配 |
| 输入 | InputDevice 与事件能力 | 输入事件消费者 |
| vsock | CID、连接及事件接口 | 连接传输适配 |
| USB host | 设备变化、描述符和设备对象 | USB 设备管理与 USBFS |
| 平台 provider | 时钟、复位、IRQ、引脚及总线控制 | HAL、SoC 和驱动绑定 |
共享的是按合同交付能力,不是业务数据格式或服务选择策略。运行时内部算法由运行时与完成维护。
1.2 查询与接管
devices.rs 等初始化代码可以枚举注册包装并接管设备,HAL 和 USB 主机管理也需要查询身份。普通请求应通过已经交付的领域句柄访问,不能在每次 I/O 中重新 probe。
take 成功后注册包装可能为空,原 Device<T> 不再代表可以取得第二份硬件所有权。交付失败和服务不可用的处理需要结合生命周期,不能在服务层静默重新拿取设备。