USB 大容量存储驱动程序用于与大容量存储设备(例如闪存驱动器、外部硬盘和通过 USB 连接的其他类型的可移动介质)进行通信。USB 大容量存储驱动程序分为两部分。
SCSI 块设备
块设备实现 BlockImplQuery 和 BlockImplQueue。它支持读取、写入和刷新操作。如果在写入操作和刷新操作之间断电,则写入 USB 大容量存储设备的更改可能不会保留到设备上。驱动程序没有相应的机制来告知堆栈中较高级别的驱动程序,何时实际写入了物理介质。对于 USB 大容量存储设备,在设备确认写入后,写入操作即被视为已完成。
核心设备
核心设备充当块设备和 USB 堆栈之间的接口。核心接受来自块设备的请求,并将它们转换为 USB 请求,这些请求最终通过 USB 堆栈发送到硬件。对于每个请求,都会执行以下步骤:
- 请求被添加到队列中。
- 请求被工作线程接收。
- 系统将请求中存储的 SCSI 命令发送至设备。
- 从设备读回请求状态。
- 调用完成回调,以通知块设备层请求已完成。
某些 USB 大容量存储设备可能具有多个块设备,例如磁盘阵列。在此情况下,核心驱动程序会为每个磁盘创建一个块设备。