USB 大容量存储驱动程序

USB 大容量存储驱动程序用于与通过 USB 连接的大容量存储设备(如闪存驱动器、外部硬盘和其他类型的可移动媒体)进行通信。USB 大容量存储驱动程序分为两部分:

SCSI 块存储设备

块设备使用 block_server 库提供 fuchsia.hardware.block.volume.Service。它支持读取、写入和刷新操作。如果在写入操作和刷新操作之间断电,写入 USB 大容量存储设备的更改可能不会保留到设备中。驱动程序没有机制来通知堆栈中更高级别的驱动程序写入何时实际写入到物理介质。对于 USB 大容量存储设备,当设备确认写入时,写入即被视为完成。

核心设备

核心设备充当 SCSI 块设备与 USB 堆栈之间的接口。核心从块设备接受 SCSI 请求,并将其转换为 USB 请求,最终通过 USB 堆栈发送到硬件。对于每个请求,系统都会执行以下步骤:

  • SCSI 层从块服务器接收请求,并将其排队等待工作器线程处理。
  • 工作器线程会提取请求,并通过 USB 将 SCSI 命令发送到设备。
  • 通过 USB(如果适用)在请求 VMO 和设备之间传输数据。
  • 从设备读取回请求状态。
  • 请求已完成,正在通过块服务器发送回复。

某些 USB 大容量存储设备可能具有多个块设备,例如磁盘阵列。在这种情况下,核心驱动程序会为每个磁盘创建一个块设备。