On Wed, May 13, 2020, at 5:05 AM, Peter Chen wrote: > On 20-05-13 10:36:05, Felipe Balbi wrote: > > > > Hi, > > > > "Sid Spry" <sid@xxxxxxx> writes: > > > > > Hi Peter, thanks for pointing me towards the ffs-test. Unfortunately after > > > some exploration in that area I still don't see how I would add a preexisting > > > function to the configuration to be handled by the kernel. > > > > > > I do see something in an AIO test in the host code where libusb is used to > > > bind a kernel driver to an endpoint. Is that something that will be necessary? > > > Device side, I'm still unsure how I tell the function to handle ECM/ethernet > > > on a collection of endpoints. > > > > > > I understand how USB works fairly well, especially on microcontrollers, but am > > > a little lost still in understanding the Linux machinery for USB. > > > > Would you please let ECM gadget work first at your board, then let f_fs work > using test application (you need to compile both host and device > application for it). After that, you may have more precise concept for > Linux USB gadget framework. > I don't see anything that harmonizes preexsting function usage with specifying custom endpoints. I've gotten the ECM gadget, and then the ECM gadget via ffs working. I've read through the ffs test but I don't see any way to assign functionality to the endpoints. The example seems to transport raw data via a bulk endpoint. I know enough to instead assign an isochronous endpoint to the UDC and transfer via that, but I don't want it to be the *only* functionality the device offers. Are you saying I can assign the ECM gadget via ffs and then add another driver after the fact? This isn't really spelled out in the documentation (from what I can see). I was operating under the assumption that assigning the UDC claims it and it's not a shared resource. I've already run into issues where certain configurations use up the available endpoints or cause other issues. For reference here is what I am currently doing: --- modprobe g_ffs cd /sys/kernel/config/usb_gadget if [[ -d "g1" ]]; then echo "" > UAC rm -rf g1; fi mkdir g1 cd g1 echo "0x1d6b" > idVendor echo "0x0104" > idProduct mkdir strings/0x409 echo "0000000000" > strings/0x409/serialnumber echo "Foo Bar Inc." > strings/0x409/manufacturer echo "Trololololo" > strings/0x409/product mkdir functions/ecm.usb0 mkdir functions/uac2.dev0 mkdir functions/midi.dev0 mkdir configs/c.1 ln -s functions/ecm.usb0 configs/c.1 ln -s functions/uac2.dev0 configs/c.1 ln -s functions/midi.dev0 configs/c.1 echo "musb-hdrc.2.auto" > UDC