GNU/Linux >> Belajar Linux >  >> Linux

Tidak Ada Udc yang Muncul Untuk Gadget Penyimpanan Massal Usb Dengan Konfigurasi?

Saat ini saya mencoba membuat gadget penyimpanan massal USB berfungsi pada raspberry pi zero W.

Tujuan utama saya adalah menerapkan fungsi mass_storage dan mtp responder ke dalam satu gadget, tetapi nanti akan ada lagi.

Saya mengikuti dokumentasi ini Setara dengan g_mass_storage dengan configfs untuk menulis skrip berikut yang menginisialisasi konfigurasi untuk gadget penyimpanan massal USB melalui configfs dan 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

Semuanya tampak berfungsi hingga langkah "Mengikat Pengontrol Perangkat USB". Setelah mengonfigurasi semuanya, masih tidak ada apa pun di /sys/class/udc/ .

Saat boot, folder /sys/class/udc/ tidak ada dan muncul setelah saya menjalankan skrip dengan sudo ./mass-storage-load start tapi tetap kosong.
Partisi configfs juga terpasang saat boot.

Terkait:Mengapa printf lebih baik daripada echo?

Setelah saya menjalankan skrip, tiga modul baru dimuat

[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

Namun tanpa apa pun di /sys/class/udc Saya tidak tahu pengontrol perangkat usb mana yang harus saya ikat ke gadget ini.
Saya banyak mencari di internet untuk menemukan seseorang yang mungkin memiliki masalah serupa tetapi saya tidak dapat menemukan sesuatu.

Jawaban yang Diterima:

Akhirnya masalahnya adalah modul dwc2 harus dimuat.

Jadi saya menambahkan dtoverlay=dwc2 ke /boot/config.txt dan dwc2 di akhir /etc/modules untuk memuatnya secara otomatis saat boot.


Linux
  1. Siapkan Server Email Dengan Virtualmin Untuk Email &Penyimpanan Tanpa Batas

  2. Memulai Samba untuk interoperabilitas

  3. Apa Arti Karakter Khusus Dalam Echo {a..z}?

  1. Mewarnai Keluaran Ekor Dengan Sed?

  2. Go For It – Daftar Pekerjaan Modern dengan Pengatur Waktu

  3. nonaktifkan aturan udev MTP untuk perangkat tertentu sehingga dapat dipasang sebagai perangkat Penyimpanan Massal USB

  1. Perintah Gema dengan Contoh Praktis

  2. Jenis sistem file untuk disimpan di penyimpanan USB, yang kompatibel dengan sebagian besar OS

  3. Automount USB drive dengan systemd