背景
UART
我正在尝试使用micro-USB 线连接到设备,GNU screen
然后Ubuntu和OSX。
在 Ubuntu 和OSX我可以使用以下命令获取最新的串行连接,该命令是我在连接设备并打开设备后立即运行的。
ls -t /dev/tty* | head -n 1
在Ubuntu我明白了(这实际上是输出ll
,-n 3
因此我可以更好地看到所显示的内容)
crw-rw---- 1 root dialout 166, 0 Jan 29 10:51 /dev/ttyACM0
crw-rw-rw- 1 root tty 5, 0 Jan 29 10:14 /dev/tty
crw-rw---- 1 root dialout 4, 68 Jan 21 16:19 /dev/ttyS4
第一项是正确的(即我可以screen /dev/ttyACM0 115200
)。
在苹果,相反,我得到了这个
crw--w---- 1 atcold tty 16, 4 29 Jan 10:56 /dev/ttys004
crw-rw-rw- 1 root wheel 19, 44 29 Jan 10:56 /dev/tty.usbmodemfd121
crw--w---- 1 atcold tty 16, 6 28 Jan 16:21 /dev/ttys006
并且第一项是错误的(我无法连接到它)而有效的是第二项(并且我不得不关闭并打开我的设备两次,因为第一次根本没有任何信息/dev/tty.usbmodemfd121
)。
问题
我的问题很简单。我如何才能自动访问正确的串行连接?我试图避免给最终用户带来太多麻烦,并尝试自动解决此问题。
回答
这是我的最终脚本:)
read -p "Connect the switched off board, then press <Enter>" temp
ls /dev/tty* > /tmp/old_tty
read -p "Turn on the board and press <Enter>" temp
ls /dev/tty* > /tmp/new_tty
screen $(comm -13 /tmp/old_tty /tmp/new_tty) 115200
答案1
解决方案可以是在插入微型 USB 之前和之后检测活动的串行连接,然后仅在插入微型 USB 后才连接到存在的串行连接。例如,可以使用 sh 脚本来完成此操作
#!/bin/sh
PATH_SUFFIX="/dev/tty"
read -p "Be sure the mini usb adapter is unplugged then press ENTER" temp
BEFORE=`ls -1 ${PATH_SUFFIX}* `
read -p "Now plug device and then press ENTER" temp
# sleep 2 seconds to be sure the filedevise is created
sleep 2
AFTER=`ls -1 ${PATH_SUFFIX}*`
OLD_IFS=$IFS
IFS='
'
for file in $AFTER ; do
if case ${BEFORE} in *"${file}"*) false;; *) true;; esac; then
FOUND=$file
fi
done
IFS=$OLD_IFS
#Now do whatever with FOUND device
echo $FOUND
答案2
您可能需要查看设置 udev 规则来为该串行设备创建具有特定名称的符号链接。
假设您可以通过供应商或序列号识别该设备。
这应该有帮助:
http://noctis.de/ramblings/linux/49-howto-fixed-name-for-a-udev-device.html