【问题标题】:Writing USB driver for Android为 Android 编写 USB 驱动程序
【发布时间】:2012-09-26 07:25:34
【问题描述】:

我正在开发一个需要连接 USB 设备的 android 应用程序。

我在 windows 上开发了一个类似的应用程序,我有用 c 编写的驱动程序。

我想为我的 android 应用程序开发一个 USB 驱动程序。 我想知道为android开发USB驱动需要什么。

我可以使用ndk重用c写的代码吗?

谢谢,

【问题讨论】:

    标签: android usb driver


    【解决方案1】:

    首先,Android 实际上就是 Linux,所以如果您说“为我的 Android 应用程序编写 USB 驱动程序”,您应该说“为您的特定设备编写 linux USB 驱动程序”。

    接下来,您必须以某种方式访问​​您的设备。当你为 linux 编写了 USB 驱动程序后,你将得到的可能是 /dev/ 中的某个文件节点。我猜你想为 Android 不提供好的 JAVA api 的非标准 USB 设备(如鼠标/操纵杆/大容量存储器)创建驱动程序?在这种情况下,您将不得不编写一个本机库(可能基于您已经拥有的 c 代码)并使用 NDK 编译它。您从中获得的 .so 文件可以打包到您的 Android 应用程序中,然后可以使用它与您的 USB 设备通信。

    总结一下:

    usb 设备驱动程序 -> 创建内核模块或将驱动程序嵌入到您的 linux 内核中:这是 linux usb 驱动程序编程的东西,您应该能够在网上找到足够的指南。如果您真的创建了 Windows USB 驱动程序,您应该能够重用部分 c 代码。

    用于访问您的设备的本地包装库(.so 文件,如果您习惯于 Windows 术语,则为 .dll)-> 创建一个 NDK 项目,该项目可以打开正确的设备节点并正确读取/写入您的设备。

    android app -> 包含 .so 文件并通过 jni 访问其原生 (c) 方法。您可以使用 javah 或 swig 等工具从库的头文件中生成 jni 代码。

    【讨论】:

      【解决方案2】:

      上一个答案假定您对设备具有 root 访问权限,并且不适合大规模部署。自 api 版本 12 以来,android 提供了一个 USB 接口,允许您使用低级控制通道和 USB 请求缓冲区与某些设备进行交互。

      支持两种类型的设备 USB主机设备 USB(安卓)配件设备

      主机模式通常只在平板电脑上得到很好的支持,手机可以并且确实支持它,但它们维持主机模式的能力很少而且非常依赖于问题设备的电压需求

      附件模式很奇怪,因为它扩展了 USB 标准以添加额外的交换,将附件标识为“android”附件

      如果上述模式对您可用,那么它们是迄今为止使用低级 c 驱动程序的更好选择,除非您完全控制它将安装到的所有设备。

      这些都是 java api,可以在 google android 文档站点的 usb 下找到文档。

      【讨论】:

      • NDK 应用程序是否需要 root 访问权限?
      • 不,你没有。本机代码可以在没有 root 的情况下构建开发和部署,但访问系统拥有的资源(如设备)将需要 root。一个非 USB 的例子是使用标准的 linux sshd,例如 dropbear,这是合理的,您可以在 play store 上找到它们,但是为了在标准端口上运行,它们需要以 root 身份运行。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多