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.
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.