Rob*_*J1M 5 scripting usb raspberry-pi raspbian
我有一个 USB GSM 调制解调器,它并不总是正常工作(华为 E367u-2)有时它会被重置(USB 设备在日志中断开/重新连接),当它恢复时,它有不同的 ttyUSB 号码。有时在启动时,usb_modeswitch似乎只是没有被解雇。计算机是运行 Raspbian 的 Raspberry Pi。
我对此有一个简单的解决方案:每分钟cron运行以下脚本(伪代码):
If WVDIAL is not running:
Run WVDIAL
Run Code Online (Sandbox Code Playgroud)
我想将脚本更改为:
If /dev/ttyUSB0 is not present:
If DevicePresent(12d1:1446):
ResetDevice(12d1:1446)
ElseIf DevicePresent(12d1:1506)
ResetUSB(12d1:1506)
If WVDIAL is not running:
Run WVDIAL
Run Code Online (Sandbox Code Playgroud)
显然这是伪代码,但我需要将以下几行串在一起,但我不知道如何:
如果 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
Run Code Online (Sandbox Code Playgroud)
这让我可以找到/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
Run Code Online (Sandbox Code Playgroud)
如果您知道正确的 /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
Run Code Online (Sandbox Code Playgroud)
因此,我需要将最后 2 个部分和一个测试串/dev/ttyUSB0到一个部分,该部分位于“如果您希望命令始终运行,请将其放在这里”注释下。
我想你基本上就在那里:
#!/bin/sh
for X in /sys/bus/usb/devices/*
do
if [ -e "$X/idVendor" ] && [ -e "$X/idProduct" ] \
&& [ 12d1 = $(cat "$X/idVendor") ] && [ 1446 = $(cat "$X/idProduct") ]
then
echo 0 >"$X/authorized"
# might need a small sleep here
echo 1 >"$X/authorized"
fi
done
Run Code Online (Sandbox Code Playgroud)
这会在所有设备上循环(正如您所做的那样),每次找到供应商:产品 ID 的匹配项时,它都会应用适合您的重置。
顺便说一句,您可能想将该watchdog计划作为您cron工作的替代方案。