【问题标题】:libusb_open return LIBUSB_ERROR_ACCESS in jni androidlibusb_open 在 jni android 中返回 LIBUSB_ERROR_ACCESS
【发布时间】:2019-06-15 06:30:16
【问题描述】:

我想使用 libusb1.0.22 从 ROOTed android 设备 (4.4) 中的 c++ 本机代码访问 USB 设备。首先,我成功调用 libusb_init,然后调用 libusb_open 但得到 LIBUSB_ERROR_ACCESS 错误。为什么在设备 root 时出现此错误?


【问题讨论】:

    标签: c++ android-ndk java-native-interface libusb


    【解决方案1】:

    一个

    在 root 设备上您也必须获得权限! (像linux...)

    (1) 您必须关闭 SELinux (setenforce 0)

    (2) 您必须授予文件权限 (chmod 666 /dev/bus/usb/*/*),然后您的 USB 连接到 Android 设备。如果您只有一个 USB 端口,您可以通过 wifi 使用 adb 来完成。 (或更改设备规则以附加具有 666 权限的 USB 设备节点)

    (*) 您可以使用“adb shell run-as”来检查您的应用权限。

    B

    (1) 您需要检查您的设备是否也在主机模式下工作。

    (2) 您需要检查您的 USB 数据线是否为 OTG。

    【讨论】:

    • 关于“关闭 SELinux”,前提是它可以在您的设备上运行。 “在 Android 5.0 及更高版本中,SELinux 完全执行,建立在 Android 4.3 的许可版本和 Android 4.4 的部分执行的基础上。” source.android.com/security/selinux
    • 非常感谢。为什么我们需要root权限才能从c++ native访问USB设备,而我们可以直接使用android.usb.host api?是否必须具有root权限或有其他解决方案来解决这个问题。
    • 您不必植根设备。您可以从 Java 层获取 USB 权限,将 USB fd 从 Java 发送到 libusb c++ 代码,然后使用它。
    • 我们在 android 的原生 c++ 中使用 libusb_open 吗?我在本机代码中为未植根的设备使用此函数,返回错误
    • 你看例子如何用这个项目做到这一点:github.com/saki4510t/UVCCamera(libuvc 在 libuvc 之上工作)。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 2022-07-08
    • 2013-06-25
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    相关资源
    最近更新 更多