Saya memiliki modem USB GSM yang tidak selalu memiliki properti kerja (Huawei E367u-2). Kadang-kadang itu akan direset (perangkat USB putuskan / sambungkan kembali dalam log) dan ketika muncul kembali, ia memiliki nomor ttyUSB yang berbeda. Terkadang saat boot, usb_modswitch sepertinya tidak dipecat. Komputer adalah Raspberry Pi yang menjalankan Raspbian.
Saya punya solusi sederhana untuk ini, setiap menit CRON menjalankan skrip berikut:
If WVDIAL is not running:
Run WVDIAL
Saya ingin mengubah skrip menjadi ini:
If /dev/ttyUSB0 is not present:
If DevicePresent(12d1:1446):
ResetDevice(12d1:1446)
ElseIs DevicePresemt(12d1:1506)
ResetUSB(12d1:1506)
If WVDIAL is not running:
Run WVDIAL
Jelas ini adalah kode semu, tetapi saya memiliki baris-baris berikut yang perlu saya rangkai, tetapi saya tidak tahu caranya:
Ini memuat wvdial jika tidak berjalan:
#! /bin/sh
# /etc/init.d/wvdial
### BEGIN INIT INFO
# Provides: TheInternet
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Simple script to start a program at boot
# Description: A simple script from www.stuffaboutcode.com which will start / stop a program a boot / shutdown.
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting GPRS Internet"
# run application you want to start
/sbin/start-stop-daemon --start --background --quiet --exec /usr/bin/wvdial internet
;;
stop)
echo "Stopping GPRS Internet"
# kill application you want to stop
/sbin/start-stop-daemon --stop --exec /usr/bin/wvdial
;;
*)
echo "Usage: /etc/init.d/noip {start|stop}"
exit 1
;;
esac
exit 0
Ini memungkinkan saya menemukan /sys
jalur ke perangkat tertentu:
for X in /sys/bus/usb/devices/*; do
echo "$X"
cat "$X/idVendor" 2>/dev/null
cat "$X/idProduct" 2>/dev/null
echo
done
Dan ini me-reset perangkat USB jika Anda mengetahui jalur / sys yang benar:
echo 0 > /sys/bus/usb/devices/1-1.2.1.1/authorized
echo 1 > /sys/bus/usb/devices/1-1.2.1.1/authorized
Jadi, saya perlu merangkai 2 bagian terakhir dan tes untuk /dev/ttyUSB0
menjadi bagian yang berada di bawah bagian "Jika Anda ingin perintah untuk selalu berjalan. Letakkan di sini"
PEMBARUAN 1
usbreset, meskipun berfungsi, tidak melakukan pekerjaan. Hanya gema 0 1 ke dalam yang authroized
benar mensimulasikan putuskan hubungan perangkat / menghubungkan kembali.
Inilah yang menjadi trik untuk mem-boot perangkat atau usb_modeswitch kembali ke kehidupan. Karena itu, saya berhasil mengoceh bersama ini:
echo "Searching for $1"
devPath=`lsusb | grep $1 | sed -r 's/Bus ([0-9]{3}) Device ([0-9]{3}).*/bus\/usb\/\1\/\2/g;'`
echo "Found $1 @ $devPath"
echo "Searching for sysPath"
for sysPath in /sys/bus/usb/devices/*; do
echo "$sysPath/uevent"
devName=`cat "$sysPath/uevent" | grep $devPath`
#echo devName=$devName
if [ ! -z $devName ]
then
break
fi
done
if [ ! -z $devName ]
then
echo "Found $1 @ $sysPath, Resetting"
echo "echo 0 > $sysPath/authorized"
echo 0 > $sysPath/authorized
echo "echo 1 > $sysPath/authorized"
echo 1 > $sysPath/authorized
else
echo "Could not find $1"
fi
Karena itu saya pikir yang harus saya lakukan sekarang adalah meletakkan ini di skrip init.d:
if ttyUSB0 not present
if 12d1:1446 present
/usr/sbin/resetdevicebyauthorized 12d1:1446
else if 12d1:1506 present
/usr/sbin/resetdevicebyauthorized 12d1:1506
fi
fi
usbreset
gagal dengan modem Huawei, modem tidak dapat pulih dan macet saat reboot. Saat ini saya sedang memecahkan masalah yang sama, dan mungkin memiliki solusi yang berfungsi segera.Jawaban:
saya membuat skrip bash sederhana untuk mengatur ulang perangkat USB tertentu.
sumber
Anda dapat mengatur ulang bus USB melalui program C ini. https://gist.github.com/x2q/5124616
Unduh kode C dari github
Kompilasi kode C sebagai usbreset
Berikan izin eksekusi ke program
Daftar perangkat USB Anda melalui perintah lsusb
Anda akan melihat entri perangkat USB di output Anda dan memeriksa perangkat yang ingin Anda atur ulang.
Perangkat Bus 002 003 : ID 0fe9: 9010 DVICO
Jalankan program usbreset dengan argumen
sumber
x = lsusb | grep xxxx:yyyy
/usr/sbin/usbreset $x
. Sayangnya sepertinya kita tidak bisa memasukkan kalimat dalam komentarwvdialer
). Saat ini CRON menjalankannya setiap menit, dan memuat ulang wvdial jika tidak ada (menggunakanstart-stop-daemon
). Tetapi itu tidak akan dimulai jika ttyUSB0 tidak ada. Sekarang karena berbagai alasan, tongkat terkadang perlu dihidupkan kembali. Jadi dalam naskah itu saya perluIf ttyUSB0 is not present reset the USB stick
Anda dapat menggunakan pyusb untuk mengatur ulang perangkat:
Pertama instal pyusb:
Kemudian buat skrip ini dan jalankan:
Adaptasi
idVendor
danidProduct
ke perangkat yang ingin Anda atur ulang (Anda dapat menemukan id melaluilsusb
)sumber
Terima kasih banyak! Kode-C ini bekerja dengan sangat baik. Ini adalah skrip shell sederhana yang saya lakukan untuk mengidentifikasi perangkat USB
sumber
Mengatur ulang modem Huawei saya tidak selalu berhasil. Karena saya melakukan panggilan dengan layanan systemd, saya menambahkan beberapa baris yang benar-benar menghilangkan ikatan semua perangkat USB dan mem - boot ulang raspberry setelah 5 menit :-)
sumber