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.