मेरे पास एक USB GSM मॉडेम है जो काम की संपत्ति (Huawei E367u-2) को परिवर्तित नहीं करता है। कभी-कभी यह रीसेट हो जाता है (लॉग में USB डिवाइस डिस्कनेक्ट / फिर से कनेक्ट होता है) और जब यह वापस आता है, तो इसके अलग-अलग ttyUSB नंबर होते हैं। कभी-कभी बूट पर, usb_modswitch लगता है बस निकाल नहीं दिया गया। कंप्यूटर एक रास्पबेरी पाई है जो रास्पबियन चल रही है।
मेरे पास इसका एक सरल समाधान है, हर मिनट 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
इसलिए, मुझे पिछले 2 खंडों और एक परीक्षण को /dev/ttyUSB0
एक खंड में विभाजित करने की आवश्यकता है जो "यदि आप चाहते हैं कि एक कमांड हमेशा चले। इसे यहां रखें।"
अद्यतन १
usbreset, हालांकि कामकाज, काम नहीं करता है। केवल 1 में 1 प्रतिध्वनि 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 मोडेम के साथ विफल हो जाता है, मॉडेम पुनर्प्राप्त करने में सक्षम नहीं है और रिबूट पर जमा देता है। मैं वर्तमान में एक ही समस्या को हल कर रहा हूं, और जल्द ही पूरी तरह से काम कर सकता हूं।