USB大容量存储设备驱动

USB大容量存储设备驱动是用来与大容量存储设备通信的,例如闪存盘、外置硬盘以及其他类型的 通过USB连接的可移除媒体等。USB大容量存储设备驱动分为两个部分。

块设备

块设备实现BlockImplQueryBlockImplQueue。它支持读写操作, 但是刷新(flush)操作没有被实现。如果在写操作后掉电,向USB大容量存储设备写入的内容 可能不会保存。当物理媒体真正完成写操作时,驱动程序没有办法向栈中更高层级的驱动进行 通知。对于USB大容量存储设备而言,当设备认可了此次写入时,这次写入才被认为完成了。

核心设备

核心设备在块设备和USB栈之间作为接口。核心设备从块设备接收请求,并将这些请求 转化成USB请求,这些USB请求最终通过USB栈被发送至硬件。对于每个请求,下列步骤 会被执行:

  • 请求被添加入队列中。
  • 请求被工作线程(worker thread)接手处理。
  • 请求被编码成SCSI命令,并发送至设备。
  • 请求状态被设备读取。
  • 完成回调(Completion callback)被调用,通知块设备层(block device layer)请求已经完成。

一些USB大容量存储设备或许有多个块设备,例如磁盘阵列(an array of disks)。这种情况下, 核心驱动为每个磁盘创造一个块设备。