如何在 Android Shell 中通过 ConfigFS 设置 USB Gadget
How to Setup USB Gadget via ConfigFS in Android Shell
我目前正在尝试将我的 Android-Phone 连接到我的 Windows 机器,同时充当 HID、RNDIS 和 MASS_STORAGE 设备。这些模式中的每一个作为单一模式都工作正常但我无法将它们正确组合,例如,我可以使用 HID,MASS_STORAGE 但 norfilter
过滤 HID、RNDIS。目前最佳工作实践是通过 shell 设置 USB 模式,例如
setprop sys.usb.config mass_storage,adb
我还致力于使用:
echo 0 > /sys/class/android_usb/android0/enable
echo ecm,adb > /sys/class/android_usb/android0/functions
echo 1 > /sys/class/android_usb/android0/enable
这样我也可以启动网络接口 ecm0。
从网络上的所有阅读中,我可以使用 sysfs 或 configfs 来设置我自己的具有不同功能的小工具。因此,我必须将 /config 作为配置挂载到我的 Phone 上,但无论我尝试什么,/config 目录都保持为空且只读。
有人知道在 Android Shell 中设置 USB-Gadget 的正确方法吗?
据我所知,无法使用 USB 设备 类,例如 大容量存储、PTP , MTP, RNDIS (网络共享),... 同时 因为在像智能手机这样的复合设备中设备 类 是 在接口级别定义的 并且仅在 USB 协议中 可以立即声明一个 接口
您可以使用 lsusb -v
为我的智能手机检查此输出是(在网络共享模式下)
Bus 003 Device 055: ID 0e24:8000 MediaTek Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 **(Defined at Interface level)**
您可以编写代码以编程方式切换接口(并确保为每个接口加载适当的驱动程序/内核模块)您不能同时使用它们...
感谢您的回答
我再次研究它并找到了解决这个问题的方法。
首先您需要禁用 USB 端口
echo 0 > /sys/class/android_usb/android0/enable
一个很重要的就是正确的"functions"-String
echo "mass_storage,rndis_qc,ffs" > /sys/class/android_usb/android0/functions
在我的例子中,hid 函数由内核自动附加,否则就必须添加它。
另一件非常重要的事情是通过以下方式设置供应商和产品 ID:
echo "VID" > /sys/class/android_usb/android0/idVendor
echo "PID" > /sys/class/android_usb/android0/idProduct
如果您使用现有设备的供应商和产品 ID,Windows10 将自动加载该设备的驱动程序。
可在此处找到 USB 设备的 Vendor/Product ID 列表:
http://www.linux-usb.org/usb.ids
最后您需要重新启用 USB 端口
echo 1 > /sys/class/android_usb/android0/enable
如果您想使用网络共享,您当然也需要对其进行配置。在我的例子中,我成功地将我的 Android 设备用作 Windows10 中的 Hid、Storage 和 Rndis 设备。
希望这对某人有所帮助 ;)
我目前正在尝试将我的 Android-Phone 连接到我的 Windows 机器,同时充当 HID、RNDIS 和 MASS_STORAGE 设备。这些模式中的每一个作为单一模式都工作正常但我无法将它们正确组合,例如,我可以使用 HID,MASS_STORAGE 但 norfilter 过滤 HID、RNDIS。目前最佳工作实践是通过 shell 设置 USB 模式,例如
setprop sys.usb.config mass_storage,adb
我还致力于使用:
echo 0 > /sys/class/android_usb/android0/enable
echo ecm,adb > /sys/class/android_usb/android0/functions
echo 1 > /sys/class/android_usb/android0/enable
这样我也可以启动网络接口 ecm0。
从网络上的所有阅读中,我可以使用 sysfs 或 configfs 来设置我自己的具有不同功能的小工具。因此,我必须将 /config 作为配置挂载到我的 Phone 上,但无论我尝试什么,/config 目录都保持为空且只读。
有人知道在 Android Shell 中设置 USB-Gadget 的正确方法吗?
据我所知,无法使用 USB 设备 类,例如 大容量存储、PTP , MTP, RNDIS (网络共享),... 同时 因为在像智能手机这样的复合设备中设备 类 是 在接口级别定义的 并且仅在 USB 协议中 可以立即声明一个 接口
您可以使用 lsusb -v
为我的智能手机检查此输出是(在网络共享模式下)
Bus 003 Device 055: ID 0e24:8000 MediaTek Inc.
Couldn't open device, some information will be missing
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 **(Defined at Interface level)**
您可以编写代码以编程方式切换接口(并确保为每个接口加载适当的驱动程序/内核模块)您不能同时使用它们...
感谢您的回答 我再次研究它并找到了解决这个问题的方法。
首先您需要禁用 USB 端口
echo 0 > /sys/class/android_usb/android0/enable
一个很重要的就是正确的"functions"-String
echo "mass_storage,rndis_qc,ffs" > /sys/class/android_usb/android0/functions
在我的例子中,hid 函数由内核自动附加,否则就必须添加它。
另一件非常重要的事情是通过以下方式设置供应商和产品 ID:
echo "VID" > /sys/class/android_usb/android0/idVendor
echo "PID" > /sys/class/android_usb/android0/idProduct
如果您使用现有设备的供应商和产品 ID,Windows10 将自动加载该设备的驱动程序。
可在此处找到 USB 设备的 Vendor/Product ID 列表:
http://www.linux-usb.org/usb.ids
最后您需要重新启用 USB 端口
echo 1 > /sys/class/android_usb/android0/enable
如果您想使用网络共享,您当然也需要对其进行配置。在我的例子中,我成功地将我的 Android 设备用作 Windows10 中的 Hid、Storage 和 Rndis 设备。
希望这对某人有所帮助 ;)