configfs가 있는 USB 대용량 저장 장치에 UDC가 표시되지 않음

configfs가 있는 USB 대용량 저장 장치에 UDC가 표시되지 않음

저는 현재 Raspberry Pi Zero W에서 작동할 USB 대용량 저장 장치를 얻으려고 노력하고 있습니다.

나의 주요 목표는 Mass_storage 및 mtp 응답기 기능을 작은 도구에 구현하는 것이지만 이는 나중에 구현될 것입니다.

나는 이 문서를 따랐다.g_mass_storage 및 configfs와 동일configfs 및 functionfs를 통해 USB 대용량 저장 장치의 구성을 초기화하려면 다음 스크립트를 작성하십시오.

#!/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

"USB 장치 컨트롤러 바인딩" 단계까지는 모든 것이 괜찮은 것 같습니다. 모든 것을 구성한 후에도 여전히 아무것도 없습니다 /sys/class/udc/.

시작할 때 폴더가 /sys/class/udc/존재하지 않으며 스크립트를 실행한 후에 폴더가 나타나지만 sudo ./mass-storage-load start비어 있습니다. configfs 파티션은 부팅 시에도 마운트됩니다.

스크립트를 실행하면 세 개의 새 모듈이 로드됩니다.

pi@raspberrypi:~ $ 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

그러나 /sys/class/udc이 가젯에 어떤 USB 장치 컨트롤러를 바인딩해야 하는지 모르겠습니다. 비슷한 문제를 겪고 있는 사람들을 찾기 위해 인터넷에서 많은 검색을 해봤지만 아무 것도 찾을 수 없습니다.

답변1

마지막 문제는 dwc2 모듈을 로드해야 한다는 것입니다.

그래서 시작 시 및 dtoverlay=dwc2끝에 자동 로드를 추가했습니다 ./boot/config.txtdwc2/etc/modules

관련 정보