5

我目前正在开发一个需要 Android 中的 Usb 主机模式的项目(使用 4.2.2)。我需要能够执行标准文件操作,例如列出文件和从 USB 驱动器读取。使用主机模式文档,我已经能够检测到驱动器是否连接,是 USB 大容量存储,并找到各种端点。

我卡住的地方是在那之后该怎么做。我想我并不真正了解控制和批量传输之间的区别,或者在控制传输的情况下甚至发生了什么。不幸的是,我对 USB 本身的了解有些有限,而且我听说文档相当令人生畏。

任何人都可以帮助指导我完成,或指出一个工作示例,我需要做什么才能基本上“安装”USB驱动器?正如我之前所说,我只需要那些列出文件并读取它们的文件操作,而不是写入。我还应该提到目标手机是三星的 Galaxy Nexus。

谢谢

4

1 回答 1

0

控制端点(通常)用于向 USB 设备发送命令。
批量端点(通常)用于将数据传输到 USB 设备。

批量数据的结构没有定义。
但是在控制传输中定义了数据的结构。
主机发送一个 8 字节的数据包,其中包含有关命令的信息(如请求 ID、命令参数、在数据阶段传输的数据长度等)。然后可选地接收/发送一些数据,最后主机/设备都通过移动到状态阶段来同意命令的成功。而已!
但是,魔鬼在细节中,请参阅 USB 规范。:)


所有 USB 存储器(笔式驱动器、存储卡、硬盘驱动器)都适用于 USB 大容量存储类。

使用大容量存储类,您可以执行内存读写,但其之上的文件系统(例如:EXT3、FAT ...)需要另一个驱动程序。

所以,本质上是读/写文件。您需要连接到设备:

  1. 连接到设备(你已经完成了)
  2. 识别并控制大容量存储接口
  3. 编写大容量存储类驱动程序
  4. 编写将使用大容量存储类驱动程序读取/写入文件的文件系统驱动程序
  5. 在您的项目中使用文件系统驱动程序 api。

要编写大容量存储类驱动程序,您必须阅读 USB 大容量存储类规范 http://www.usb.org/developers/docs/devclass_docs/并且您正在寻找的只是 Bulk

然后,参考您针对该设计和规范的文件系统。(如果可供使用的话)


AFAIK,Android 具有连接到 USB 的文件系统安装工具,因此您正在重新发明轮子。


额外说明:
某些文件系统未公开记录(尽管可能存在反向 engg 信息)(例如:NTFS)
,并且某些文件系统(部分)获得了专利。(例如:脂肪)

于 2015-11-02T19:37:01.100 回答