【发布时间】:2012-07-05 08:58:16
【问题描述】:
既然Android APIs support working directly with USB devices(自 3.1 起),我很好奇是否有任何工作为一些更流行的符合类的设备(如音频或 HID)创建“软模式”驱动程序。
换句话说,是否有任何开源项目可以将与特定设备类的更有用的通信封装到可以添加到 Android 项目中的 Java 类中?
出于我的目的,我对 USB 音频特别感兴趣,但似乎社区构建的一组源自 Linux 内核模块源的类可能对许多项目有益。我希望其他人也有同样的想法并且已经开始工作。任何指向这个方向的指针都将不胜感激。
我偶然发现的其他一些资源:
- User mode USB isochronous transfer from device-to-host
- Audio Evolution 似乎以某种方式构建了自己的用户区驱动程序
【问题讨论】:
-
USB 音频:如果您对音频数据流感兴趣,这在 android 上是不可能的,因为 API 不支持同步端点。然而,音频类的 MIDI 部分将起作用(仅使用批量端点)。到目前为止还没有看到任何项目。
-
谢谢 Alexander,这非常很高兴知道。
-
这是一个有趣的想法。然而,使用“厚”API 层处理大量小数据包可能会很棘手。此外,通用 USB 访问是否会破坏安全考虑也是值得怀疑的。在 vanilla linux 上,每个 USB 设备都根据系统定义的规则进行配置,这些规则也决定了谁能够访问该设备。另一方面,Android 设备通常是“单用户”设备,并且应用程序在 API 层上被沙盒化,所以应该没问题。但是,如果 Android 能够与一组精心挑选的内核模式驱动程序相结合,那么一开始就很好。
-
@dronus,同意。实际上似乎正在添加一些额外的内核驱动程序。问题是,它是特定于设备的。目前只有几家制造商涉足这一领域。
-
但是,它并不特定于任何 Android 设备(USB 由通用 USB 堆栈抽象出来),而是连接的设备。因此,任何可插拔设备制造商都可以通过这种方式制作 Java 驱动程序,其中添加内核模块驱动程序会更有用……第三方开发人员无法将其添加到 Android 设备中。另一方面,本机代码可以添加到由应用程序沙箱保护的 Android 应用程序中。这可能表明 linux 本身存在设计缺陷,因此是否应始终将驱动程序置于内核模式中令人怀疑。
标签: android usb driver device-driver