背景

背景

背景

UART我正在尝试使用micro-USB 线连接到设备,GNU screen然后UbuntuOSX

在 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

相关内容