如何在Android Shell中通过ConfigFS设置USB小工具

时间:2018-01-24 10:16:02

标签: android linux shell usb

我目前正在尝试将我的Android手机连接到我的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目录保持空和只读。

有没有人知道在Android Shell中设置USB-Gadget的正确方法?

2 个答案:

答案 0 :(得分:3)

谢谢你的回答 我再次努力,找到了解决这个问题的方法。

首先,您需要禁用USB端口

echo 0 > /sys/class/android_usb/android0/enable

一个非常重要的事情是正确的"功能" -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设备的供应商/产品ID列表可在此处找到:

http://www.linux-usb.org/usb.ids

最后,您需要重新启用USB端口

echo 1 > /sys/class/android_usb/android0/enable

如果你想使用网络共享,你当然也需要配置它。在我的情况下,我成功地在Windows10中使用我的Android设备作为Hid,Storage和Rndis设备。

希望这有助于某人;)

答案 1 :(得分:0)

据我所知,无法使用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)**

你可以编写代码来以编程方式切换接口(并确保加载每个接口的相应驱动程序/内核模块)你不能同时使用它们......