On 20-05-16 00:57:55, Sid Spry wrote: > On Thu, May 14, 2020, at 8:05 PM, Peter Chen wrote: > > > > > > > > > > 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? > > > > ffs (f_fs.c) is used for customized function, other functions, like ECM (f_ecm.c) > > and Mass Storage (f_mass_storage.c) are used for certain function. You could > > use configfs (like you have done below) to put customized function and certain functions > > into one configuration, and let the host see them at the same time. Do your > > real requirement is one customized function and one ECM function in one USB gadget? > > If it is, below is the example to combine f_fs, mass_storage, and NCM together. > > > > cd /sys/kernel/config/usb_gadget > > cd g1 > > echo "0x1d6b" > idVendor > > echo "0x0105" > idProduct > > mkdir /dev/usb-ffs > > mkdir functions/ffs.usb > > mount -t functionfs usb /dev/usb-ffs > > ln -s functions/ffs.usb configs/c.1 > > /home/root/usb_test/ffs_test/ffs-test & /* your own test application */ > > while [ ! -e /dev/usb-ffs/ep1 ] > > do > > echo "." > > sleep 1; > > done > > mkdir functions/ncm.0 > > ln -s functions/ncm.0 configs/c.1 > > mkdir functions/mass_storage.0 > > ln -s functions/mass_storage.0 configs/c.1 > > echo $FILE > functions/mass_storage.0/lun.0/file > > > > Peter > > > > Hi Peter, thanks for the advice. I realized I was confusing FunctionFS and ConfigFS a little while after I sent my message and saw the FFS configuration in the ConfigFS documentation. > > And yes, I need ECM/NCM (one is newer and faster, will go look it up again) and my custom function. I may also include a serial port. > > I have been having issues creating any file called "ffs.${id}" in the gadget directory. It fails with device or resource busy. I assume this means I have misconfigured it, but I am copying your example; or missing the driver, but I have ensured it is there.[1] I have also tried ensuring the ffs function is added first. Any pointers? > 1. Please build in all configfs functions, and choose through the script. CONFIG_USB_CONFIGFS=y CONFIG_USB_CONFIGFS_SERIAL=y CONFIG_USB_CONFIGFS_ACM=y CONFIG_USB_CONFIGFS_OBEX=y CONFIG_USB_CONFIGFS_NCM=y CONFIG_USB_CONFIGFS_ECM=y CONFIG_USB_CONFIGFS_ECM_SUBSET=y CONFIG_USB_CONFIGFS_RNDIS=y CONFIG_USB_CONFIGFS_EEM=y CONFIG_USB_CONFIGFS_MASS_STORAGE=y CONFIG_USB_CONFIGFS_F_LB_SS=y CONFIG_USB_CONFIGFS_F_FS=y CONFIG_USB_CONFIGFS_F_UAC1=y CONFIG_USB_CONFIGFS_F_UAC1_LEGACY=y CONFIG_USB_CONFIGFS_F_UAC2=y CONFIG_USB_CONFIGFS_F_MIDI=y CONFIG_USB_CONFIGFS_F_HID=y CONFIG_USB_CONFIGFS_F_UVC=y 2. Try exactly the same script I gave you, do not try change any charaters (except the position for your application) > > cd /sys/kernel/config/usb_gadget > > cd g1 > > echo "0x1d6b" > idVendor > > echo "0x0105" > idProduct > > mkdir /dev/usb-ffs > > mkdir functions/ffs.usb > > mount -t functionfs usb /dev/usb-ffs > > ln -s functions/ffs.usb configs/c.1 > > /home/root/usb_test/ffs_test/ffs-test & /* your own test application */ > > while [ ! -e /dev/usb-ffs/ep1 ] > > do > > echo "." > > sleep 1; > > done > > [1]: I actually did not have CONFIG_USB_CONFIGFS_F_FS nor F_NCM/ECM set however the necessary code seemed to have been pulled in some other way and the modules were available. They were loaded, and as explained my shell-based configfs code worked. They are set now and the problem persists. -- Thanks, Peter Chen