How to Setup USB Gadget via ConfigFS in Android Sh

2020-07-26 05:18发布

问题:

I am currently trying to get my Android-Phone connected to my Windows machine acting as HID, RNDIS and MASS_STORAGE device simultaneously. Each of those Modes as single mode is working fine but I cant get them combined properly, for example, i can use HID, MASS_STORAGE but norfilter filter HID, RNDIS. Best working practice at the moment is Setting the USB Mode via shell e.g.

setprop sys.usb.config mass_storage,adb

I also worked on using:

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

That way I also could get the network interface ecm0 going.

From all read on the web, i could use sysfs or configfs to setup my own gadget with different functions. Therefore I would have to mount /config as configs on my Phone but no matter what I try the /config directory stays empty and read-only.

Does anyone know a proper way to setup USB-Gadget in an Android Shell?

回答1:

thanks for your answer I worked on it again and found a way to figure this out.

First you need to disable the USB-Port

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

One very important thing is the right "functions"-String

echo "mass_storage,rndis_qc,ffs" > /sys/class/android_usb/android0/functions

In my case the hid functions are appended automatically by the Kernel otherwise one would have to add that.

The other VERY important thing is to set the Vendor and Product id's via:

echo "VID" > /sys/class/android_usb/android0/idVendor
echo "PID" > /sys/class/android_usb/android0/idProduct

If you use the Vendor and Product id's of an existing device Windows10 will load the driver for that device automatically.

A list of Vendor/Product id's for USB devices can be found here:

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

Finally you need to reenable the USB port

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

If you want to use tethering you would of course need to configure that as well. In my case i managed to use my Android device as Hid,Storage and Rndis device in Windows10 successfully.

Hope this helps someone ;)



回答2:

as far as i know it is not possible to use the USB device classes like i.e. mass storage, PTP , MTP, RNDIS ( tethering ),... simultaneously because in a composite device like a smartphone the device classes are defined on interface level and in USB protocol only one interface can be claimed at an instant

you can check this using lsusb -v for my smartphone the output is ( in tethering mode )

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)**

you can write code to switch the interfaces programmatically ( and ensure that the appropriate drivers / kernel modules for each interface are loaded ) you can not use them simultaneously ...