raspberry-pi - 如何在树莓派上找到 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 设备才能与之通信。但是怎么找呢?
解决方案
您可以查找/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
中的功能逻辑。
推荐阅读
- javascript - 在 JavaScript 中自动打印
- c++ - 如何在另一个类中创建一个类的实例?
- python - 为什么使用 QSortFilterProxyModel 时 layoutChanged.emit() 不更新 QListView?
- php - 如何在codeigniter 3中使用for循环显示数据库中的数据?
- mysql - 存储过程和 JSON 中的 SQL 注入
- javascript - 如果使用 setContent 加载页面,Puppeteer 将不会加载图像
- php - 在 ubuntu 服务器中使用 sendmail 发送电子邮件的问题
- pandas - python pandas合并单个数据框中的唯一行值
- typescript - axios 没有导出成员 'CancelToken'
- html - Angular中链接的条件文本格式