GNU/Linux >> Linux の 問題 >  >> Linux

Configfsを使用したUsbマスストレージガジェットにUdcが表示されませんか?

現在、USBマスストレージガジェットをラズベリーパイゼロWで動作させようとしています。

私の主な目的は、mass_storage関数とmtpレスポンダー関数の両方を1つのガジェットに実装することですが、後で提供されます。

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パーティションも起動時にマウントされます。

関連:printfがechoよりも優れているのはなぜですか?

スクリプトを実行した後、3つの新しいモジュールがロードされます

[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

ただし、/sys/class/udcには何もありません このガジェットにバインドする必要があるUSBデバイスコントローラーがわかりません。
インターネットでよく検索して、同様の問題が発生する可能性のあるユーザーを見つけましたが、何かが見つかりません。

承認された回答:

最後に、問題はモジュールdwc2をロードする必要があることでした。

そこで、dtoverlay=dwc2を追加しました /boot/config.txtへ およびdwc2 /etc/modulesの最後に 起動時に自動的にロードします。


Linux
  1. Stratisを使用したLinuxでのローカルストレージの構成

  2. 無制限のEメールとストレージ用にVirtualminを使用してEメールサーバーをセットアップする

  3. Sedでテール出力を着色しますか?

  1. Go For It –タイマー付きの最新のToDoリスト

  2. 実際の例を含むエコーコマンド

  3. IP の有効性を確認する

  1. 相互運用性のためのSambaの使用開始

  2. In Echo {a..z}では特殊文字は何を表していますか?

  3. systemd で USB ドライブを自動マウントする