首页 > 解决方案 > 如何在树莓派上找到 USB 调制解调器的 tty?

问题描述

我想向连接到树莓派的 USB 调制解调器发送 AT 命令。我发现一些帮助提到 USB 调制解调器通常连接为 ttyACM 或 ttyUSB 设备,但我没有 ttyACM 或 ttyUSB 设备。我有从 tty1 到 tty63 的设备,但我不知道如何识别调制解调器使用的是哪一个。

我试图通过在未连接调制解调器的情况下存储设备列表来查找设备,然后在插入调制解调器后比较设备列表:

ls /dev/ > dev_list_1.txt
(plug the modem in)
ls /dev/ | diff --suppress-common-lines -y - dev_list_.txt

返回给我:

bsg                               <
sda                               <
sg0 

我尝试使用 cu 工具连接调制解调器:

sudo cu -l sda
sudo cu -l sg0

但两者都返回:

cu: open (/dev/sg0): Permission denied
cu: sg0: Line in use

所以我也尝试使用 minicom 并配置与 /dev/sg0 或 /dev/sda 的串行通信,但它也不起作用。

所以我想我需要找到调制解调器使用的正确的 tty 设备才能与之通信。但是怎么找呢?

标签: raspberry-piusbmodem

解决方案


您可以查找/sys/class/tty/*/device条目并忽略所有指向 serial8250 的链接,因为它们不是 USB 设备。

使用 shell 脚本:

for device in /sys/class/tty/*/device
do
    case $(readlink $device) in
        *serial8250)    # e.g. ../../../serial8250
            ;;
        *)              # e.g. ../../../1-3:3.1
            echo $device | rev | cut -d/ -f2 | rev
            ;;
    esac;
done | sed 's@^@/dev/@'

产生

/dev/ttyACM0
/dev/ttyACM1
/dev/ttyS0

与我的手机连接。您可能获得的不仅仅是 USB 设备(例如 ttyS0),但至少这应该为您提供内核知道的所有 USB 串行设备(如果该设备没有填充 /sys/class/tty/ 它几乎可以肯定不是串行设备)。

这是基于libserialport 库list_ports中的功能逻辑。


推荐阅读