安卓USB OTG读取USB驱动器

5

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

我的问题在于之后该怎么做。我猜我不太理解控制传输和批量传输之间的区别,或者在控制传输的情况下究竟发生了什么。不幸的是,我对 USB 本身的了解有些有限,而且我听说文档相当困难。

有人能帮助我指导一下,或者向我指出一个可行的示例,告诉我需要做些什么才能“挂载”USB驱动器吗?如我之前所说,我只需要那些列出文件并读取它们的文件操作,不需要写入。我还应该提到,目标手机是 Samsung 的 Galaxy Nexus。

谢谢


如果我要解决这个问题,我可能会从编写代码开始,以访问插入到小型裸机嵌入式系统中的USB存储设备,因为这可能比操作系统文件系统代码更易于移植。当然,已经有一些发布的应用程序可以做到这一点,但我不知道有任何开源的应用程序。 - Chris Stratton
我知道有一些应用可以做到这一点,但正如你所说,我找不到任何开源的应用。例如,在我的 Galaxy S3 上,它并不是这个项目的目标手机,我什么也不需要做,只需插入即可使用。你有任何类似的例子吗? - echaney
1个回答

0
控制端点(通常)用于向 USB 设备发送命令。
批量端点(通常)用于将数据传输到 USB 设备。
在批量传输中,数据的结构未定义。
但是,在控制传输中,数据的结构被定义。
主机发送一个 8 字节的数据包,其中包含有关命令的信息(例如请求 ID、命令参数、要在数据阶段转移的数据长度等)。然后可选地接收/发送一些数据,并且最终主机/设备通过移动到状态阶段来同意命令的成功。就这样!
但是,魔鬼在细节中,看 USB 规范。 :)

所有的USB存储设备(U盘、存储卡、硬盘)都可以在USB大容量存储类上工作。

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

因此,要读/写文件,您需要连接到设备:

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

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

然后,请参考您所针对的文件系统的设计和规范(如果有)。


据我所知,Android具有与USB连接的文件系统挂载设施,因此您可能正在重新发明轮子。

额外说明:
一些文件系统并没有公开的文档(尽管可能存在反向工程信息)(例如:NTFS)
而一些文件系统则被(部分)专利保护。(例如:FAT)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接