GNU/Linux >> Tutoriels Linux >  >> Linux

Aucun Udc ne s'affiche pour le gadget de stockage de masse USB avec Configfs ?

J'essaie actuellement de faire fonctionner un gadget de stockage de masse USB sur un raspberry pi zero W.

Mon objectif principal est d'implémenter les fonctions mass_storage et mtp responder dans un seul gadget, mais cela viendra plus tard.

J'ai suivi cette documentation Equivalent de g_mass_storage avec configfs pour écrire le script suivant qui initialise la configuration du gadget de stockage de masse USB via configfs et 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

Tout semble fonctionner jusqu'à l'étape "Lier le contrôleur de périphérique USB". Après avoir tout configuré, il n'y a toujours rien dans /sys/class/udc/ .

Au démarrage, le dossier /sys/class/udc/ n'existe pas et il apparaît après avoir exécuté le script avec sudo ./mass-storage-load start mais elle reste vide.
La partition configfs est également montée au démarrage.

En relation:Pourquoi printf est-il meilleur que echo?

Après avoir exécuté le script, trois nouveaux modules sont chargés

[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

Cependant, sans rien dans /sys/class/udc Je ne sais pas quel contrôleur de périphérique USB je dois lier à ce gadget.
J'ai beaucoup cherché sur Internet pour trouver quelqu'un qui pourrait avoir un problème similaire, mais je n'ai rien trouvé.

Réponse acceptée :

Finalement le problème était qu'il fallait charger le module dwc2.

J'ai donc ajouté dtoverlay=dwc2 vers /boot/config.txt et dwc2 à la fin de /etc/modules pour le charger automatiquement au démarrage.


Linux
  1. Que signifient les caractères spéciaux dans Echo {a..z} ?

  2. Allez-y - Une liste de tâches moderne avec une minuterie

  3. Vérifier la validité IP

  4. Type de système de fichiers à mettre sur le stockage USB, compatible avec la plupart des systèmes d'exploitation

  5. comment étendre le stockage SAN dans CentOS 7

Ajouter du stockage avec LVM

Premiers pas avec btrfs pour Linux

Configuration du stockage local sous Linux avec Stratis

Commande Echo sous Linux (avec exemples)

Commande Echo sous Linux avec exemples

Comment gérer le stockage avec GParted Linux