나는 alwasys 작업 속성 (Huawei E367u-2)을 갖지 않는 USB GSM 모뎀을 가지고 있습니다. 때때로 재설정 (로그에서 USB 장치 연결 해제 / 다시 연결)되고 다시 올 때 다른 ttyUSB 번호가 있습니다. 때로는 부팅시 usb_modswitch가 실행되지 않는 것 같습니다. 컴퓨터는 Raspbian을 실행하는 Raspberry Pi입니다.
이에 대한 간단한 해결책이 있습니다. 매분 CRON은 다음 스크립트를 실행합니다.
If WVDIAL is not running:
Run WVDIAL
스크립트를 다음과 같이 변경하고 싶습니다.
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
분명히 이것은 의사 코드이지만 다음 줄을 함께 묶어야하지만 어떻게 알아낼 수는 없습니다.
wvdial이 실행되고 있지 않으면로드됩니다.
#! /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
이를 통해 /sys
특정 장치 의 경로를 찾을 수 있습니다 .
for X in /sys/bus/usb/devices/*; do
echo "$X"
cat "$X/idVendor" 2>/dev/null
cat "$X/idProduct" 2>/dev/null
echo
done
올바른 / sys 경로를 알고 있으면 USB 장치가 재설정됩니다.
echo 0 > /sys/bus/usb/devices/1-1.2.1.1/authorized
echo 1 > /sys/bus/usb/devices/1-1.2.1.1/authorized
따라서 마지막 두 섹션과 테스트를 /dev/ttyUSB0
"명령을 항상 실행하려면 여기에 넣으십시오"섹션에있는 섹션으로 테스트해야 합니다.
업데이트 1
usbreset은 작동하지만 작업을 수행하지 않습니다. 에 0 만 에코 authroized
하면 장치 연결 끊기 / 재 연결이 올바르게 시뮬레이션됩니다.
이것은 장치 또는 usb_modeswitch를 다시 부팅하는 트릭입니다. 따라서 나는 이것을 함께 모을 수 있었다.
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
따라서 이제 내가해야 할 일은 이것을 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
Huawei 모뎀에서 +1 이 실패하면 모뎀이 복구 할 수없고 재부팅시 정지됩니다. 나는 현재 같은 문제를 해결하고 있으며 곧 완전히 작동하는 솔루션을 가질 수 있습니다.