Tôi có modem USB GSM không thuộc tính hoạt động (Huawei E367u-2) Đôi khi, nó được đặt lại (ngắt kết nối / kết nối lại thiết bị USB trong nhật ký) và khi sao lưu, nó có các số ttyUSB khác nhau. Đôi khi khi khởi động, usb_modswitch dường như không bị sa thải. Máy tính là một Raspberry Pi chạy Raspbian.
Tôi có một giải pháp đơn giản cho vấn đề này, cứ sau một phút CRON lại chạy đoạn script sau:
If WVDIAL is not running:
Run WVDIAL
Tôi muốn thay đổi tập lệnh thành:
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
Rõ ràng đây là mã giả, nhưng tôi có các dòng sau mà tôi cần phải xâu chuỗi lại với nhau nhưng tôi không thể tìm ra cách:
Điều này tải wvdial nếu nó không chạy:
#! /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
Điều này cho phép tôi tìm /sys
đường dẫn đến một thiết bị nhất định:
for X in /sys/bus/usb/devices/*; do
echo "$X"
cat "$X/idVendor" 2>/dev/null
cat "$X/idProduct" 2>/dev/null
echo
done
Và điều này đặt lại một thiết bị USB nếu bạn biết đường dẫn / sys chính xác:
echo 0 > /sys/bus/usb/devices/1-1.2.1.1/authorized
echo 1 > /sys/bus/usb/devices/1-1.2.1.1/authorized
Vì vậy, tôi cần xâu chuỗi 2 phần cuối cùng và kiểm tra /dev/ttyUSB0
vào một phần nằm trong phần "Nếu bạn muốn một lệnh luôn chạy. Đặt nó ở đây"
CẬP NHẬT 1
usbreset, mặc dù hoạt động, không thực hiện công việc. Chỉ lặp lại 0 0 thành authroized
mô phỏng chính xác một thiết bị ngắt kết nối / kết nối lại.
Đây là những gì mà thủ thuật khởi động thiết bị hoặc usb_modeswitch trở lại. Vì vậy, tôi đã xoay sở để cùng nhau giải quyết vấn đề này:
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
Tôi nghĩ do đó tất cả những gì tôi phải làm bây giờ là đưa cái này vào tập lệnh 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
không thành công với modem Huawei, modem không thể phục hồi và đóng băng khi khởi động lại. Tôi hiện đang giải quyết vấn đề tương tự và có thể sớm có giải pháp hoạt động hoàn chỉnh.