Android 台设备上的 USB 以太网
USB Ethernet on Android devices
我有一个嵌入式 Linux 系统,它使用 USB Gadget 框架显示为以太网 class 设备(ACM 以太网,使用 g_ether 内核驱动程序。)一切都很好将其与 Ubuntu 系统一起使用以连接到设备。我可以让设备向 Ubuntu 系统发出 DHCP 租约,或者在 Ubuntu 和嵌入式系统中设置静态 IP 配置,网络流量通过得很好。在 Ubuntu 系统上,这显示为 usb0
网络接口(常规以太网端口显示为 eth0
,等等)
现在,我希望它能与 Android 设备一起使用。具体来说,三星 Galaxy S20 和 Galaxy Tab A,但对其他设备的广泛支持也很好。
我们已经有一个使用此 phone 和 tablet 的应用程序,它使用 USB 串行小工具与嵌入式系统通信。
我注意到,当我将 USB 以太网加密狗连接到 Android tablet 时,我实际上可以通过此设备访问互联网,一旦在“更多连接设置”中启用该设置" 页面。
但是,如果我们将小工具 USB 设备连接到 Android tablet,启用以太网的选项将保持禁用状态。
我怀疑这是因为 Android 要么通过 VID/PID(设备白名单?)过滤,要么仅在检测到 eth0
设备时才启用此选项.
所以我的问题有两个:
是否可以在不 root 或修改库存 Android 的情况下使 usb0
设备可从用户可访问的网络设置页面访问?
否则,Android/Linux区分usb0
和eth0
作为设备名称的条件是什么? (假设 Android 没有使用白名单来进一步过滤 acceptable 设备:我找不到对此的确认或否认。)例如,我对小工具如何宣传自己有很大的控制权我可以添加描述符、更改 ID、版本号等。 not 的作用只是简单地更改 VID/PID 以模拟现有的芯片组,例如RTL8153。如果我这样做,Linux 实际上会将设备识别为 x8153,但它仍然是 usb0
。它也打破了 usb0
;虽然它正确枚举并接受网络掩码和地址,但没有网络流量通过。我猜想 RTL8153 和类似的驱动程序想要编写 Gadget 上绝对不存在的寄存器映射,因此最终会无休止地等待某些事情发生。即使它没有破坏东西,这也是一种可怕的、不符合 USB 标准的做事方式,所以这不是我想要的方式。
我有一些数据:我们知道的另一种产品实际上需要一个使用 root 设备的应用程序和 su
配置 Linux 路由 table 手动实现USB以太网。我们正在努力避免这样做的必要性,但看起来确实不可能。令人担忧的是,这个产品有一个安全的使用配置文件,所以它似乎与需要 root phone.
有点不一致
顺便说一句,我已经尝试过使用 RNDIS 小工具驱动程序(Linux 两者都支持)并且行为是相同的。
问题已解决。这完全取决于 USB Gadget 公布的 MAC 地址。您需要为 Linux(在 Android 端)中的 udev 规则通告通用地址(U/L 位已清除)以关联 eth0
设备而不是 usb0
。完成此操作后,Android 将从设置页面正常连接到设备,即使它是复合 USB 设备。
我有一个嵌入式 Linux 系统,它使用 USB Gadget 框架显示为以太网 class 设备(ACM 以太网,使用 g_ether 内核驱动程序。)一切都很好将其与 Ubuntu 系统一起使用以连接到设备。我可以让设备向 Ubuntu 系统发出 DHCP 租约,或者在 Ubuntu 和嵌入式系统中设置静态 IP 配置,网络流量通过得很好。在 Ubuntu 系统上,这显示为 usb0
网络接口(常规以太网端口显示为 eth0
,等等)
现在,我希望它能与 Android 设备一起使用。具体来说,三星 Galaxy S20 和 Galaxy Tab A,但对其他设备的广泛支持也很好。
我们已经有一个使用此 phone 和 tablet 的应用程序,它使用 USB 串行小工具与嵌入式系统通信。
我注意到,当我将 USB 以太网加密狗连接到 Android tablet 时,我实际上可以通过此设备访问互联网,一旦在“更多连接设置”中启用该设置" 页面。
但是,如果我们将小工具 USB 设备连接到 Android tablet,启用以太网的选项将保持禁用状态。
我怀疑这是因为 Android 要么通过 VID/PID(设备白名单?)过滤,要么仅在检测到 eth0
设备时才启用此选项.
所以我的问题有两个:
是否可以在不 root 或修改库存 Android 的情况下使
usb0
设备可从用户可访问的网络设置页面访问?否则,Android/Linux区分
usb0
和eth0
作为设备名称的条件是什么? (假设 Android 没有使用白名单来进一步过滤 acceptable 设备:我找不到对此的确认或否认。)例如,我对小工具如何宣传自己有很大的控制权我可以添加描述符、更改 ID、版本号等。 not 的作用只是简单地更改 VID/PID 以模拟现有的芯片组,例如RTL8153。如果我这样做,Linux 实际上会将设备识别为 x8153,但它仍然是usb0
。它也打破了usb0
;虽然它正确枚举并接受网络掩码和地址,但没有网络流量通过。我猜想 RTL8153 和类似的驱动程序想要编写 Gadget 上绝对不存在的寄存器映射,因此最终会无休止地等待某些事情发生。即使它没有破坏东西,这也是一种可怕的、不符合 USB 标准的做事方式,所以这不是我想要的方式。
我有一些数据:我们知道的另一种产品实际上需要一个使用 root 设备的应用程序和 su
配置 Linux 路由 table 手动实现USB以太网。我们正在努力避免这样做的必要性,但看起来确实不可能。令人担忧的是,这个产品有一个安全的使用配置文件,所以它似乎与需要 root phone.
顺便说一句,我已经尝试过使用 RNDIS 小工具驱动程序(Linux 两者都支持)并且行为是相同的。
问题已解决。这完全取决于 USB Gadget 公布的 MAC 地址。您需要为 Linux(在 Android 端)中的 udev 规则通告通用地址(U/L 位已清除)以关联 eth0
设备而不是 usb0
。完成此操作后,Android 将从设置页面正常连接到设备,即使它是复合 USB 设备。