Actualmente estoy tratando de hacer que el dispositivo de almacenamiento masivo USB funcione en una raspberry pi zero W.
Mi objetivo principal es implementar las funciones de respuesta de almacenamiento masivo y mtp en un dispositivo, pero vendrá más tarde.
Seguí esta documentación Equivalente de g_mass_storage con configfs para escribir el siguiente script que inicializa la configuración del dispositivo de almacenamiento masivo USB a través de configfs y functionfs.
#!/bin/sh
set -e
CONFIGFS="/sys/kernel/config"
GADGET="$CONFIGFS/usb_gadget"
VID="0x0525"
PID="0xa4a2"
SERIAL="0123456789"
MANUF="Myself"
PRODUCT="MyProduct"
case "$1" in
    start)
        echo "Creating the USB gadget"
        echo "Loading composite module"
        modprobe libcomposite
        echo "Creating gadget directory g1"
        mkdir -p $GADGET/g1
        cd $GADGET/g1
        if [ $? -ne 0 ]; then
            echo "Error creating usb gadget in configfs"
            exit 1;
        else
            echo "OK"
        fi
        echo "Creating Mass Storage interface"
        echo "\tCreating backing file"
        dd if=/dev/zero of=/home/pi/backingFile.img bs=1024 count=1024 > /dev/null 2>&1
        mkdosfs /home/pi/backingFile.img > /dev/null 2>&1
        echo "\tOK"
        echo "\tCreating gadget functionality"
        mkdir functions/mass_storage.0
        echo 1 > functions/mass_storage.0/stall
        echo "/home/pi/backingFile.img" > functions/mass_storage.0/lun.0/file
        echo 1 > functions/mass_storage.0/lun.0/removable
        echo 0 > functions/mass_storage.0/lun.0/cdrom
        mkdir configs/c.1
        mkdir configs/c.1/strings/0x409
        ln -s functions/mass_storage.0 configs/c.1
        echo "\tOK"
        echo "OK"
        echo "Setting Vendor and Product ID's"
        echo $VID > idVendor
        echo $PID > idProduct
        echo "OK"
        echo "Setting English strings"
        mkdir -p strings/0x409
        echo $SERIAL > strings/0x409/serialnumber
        echo $MANUF > strings/0x409/manufacturer
        echo $PRODUCT > strings/0x409/product
        echo "OK"
        echo "Binding USB Device Controller"
        echo `ls /sys/class/udc` > UDC
        echo "OK"
        ;;
    stop)
        echo "Stopping the USB gadget"
        cd $GADGET/g1
        if [ $? -ne 0 ]; then
            echo "Error: no configfs gadget found" 
            exit 1;
        fi
        echo "Unbinding USB Device Controller"
        echo "" > UDC
        echo "OK"
        echo "Removing Mass Storage interface"
        rm -f configs/c.1/mass_storage.0
        rm -f /home/pi/backingFile.img
        rmdir functions/mass_storage.0
        echo "OK"
        echo "Clearing English strings"
        rmdir strings/0x409
        echo "OK"
        echo "Cleaning up configuration"
        rmdir configs/c.1/strings/0x409
        rmdir configs/c.1
        echo "OK"
        echo "Removing gadget directory"
        cd $GADGET
        rmdir g1
        cd /
        echo "OK"
        echo "Disable composite USB gadgets"
        modprobe -r libcomposite
        echo "OK"
        ;;
    *)
        echo "Usage : $0 {start|stop}"
esac
 Todo parece funcionar hasta el paso "Binding USB Device Controller". Después de haber configurado todo, sigue sin haber nada en /sys/class/udc/ .
 Al arrancar, la carpeta /sys/class/udc/ no existe y aparece después de ejecutar el script con sudo ./mass-storage-load start pero permanece vacío.
 La partición configfs también se monta en el arranque.
Después de ejecutar el script, se cargaron tres módulos nuevos
[email protected]:~ $ lsmod
Module                  Size  Used by
usb_f_mass_storage     44899  2 
libcomposite           52156  10 usb_f_mass_storage
udc_core               40853  2 usb_f_mass_storage,libcomposite
 Sin embargo, sin nada en /sys/class/udc No sé qué controlador de dispositivo USB debo vincular a este dispositivo.
 Busqué mucho en Internet para encontrar a alguien que pudiera tener un problema similar, pero no puedo encontrar nada.
Respuesta aceptada:
Finalmente el problema era que había que cargar el módulo dwc2.
 Así que agregué dtoverlay=dwc2 a /boot/config.txt y dwc2 al final de /etc/modules para cargarlo automáticamente al arrancar.