gpt4 book ai didi

linux - 如何检测属于 gsm/3g-modem 的 tty 是数据端口还是控制端口?

转载 作者:IT王子 更新时间:2023-10-29 00:58:17 25 4
gpt4 key购买 nike

我目前正在为 linux 路由器编写一个小工具,当我将适当的调制解调器插入其 USB 端口时,它会设置 wwan (gsm/3g) 连接。当设备插入时,会注册多个 ttys,我目前维护一个制造商和设备列表,以及他们注册的 ttys 中的哪个是控制/数据端口。

如果可能的话,我想摆脱这个列表,并找到一种方法以某种方式直接探测已注册的 ttys,以检查它们是控制端口还是数据端口。

我检查了 wvdial 和 modem-manager 的源代码以了解这些工具如何检测正确的端口但无法找到合适的信息。我还尝试在 sysfs 中查找信息以区分端口,但这也没有成功。

最佳答案

您无法通过外部手段检测到这一点。通常的做法是为特定调制解调器制造商和型号设置 udev 规则。或者您可以依次连接到每个 tty 并通过 AT 命令验证它是什么类型的端口。

对于 udev 规则,您可以遵循以下过程:

1) 检测调制解调器vid和pid2) 基于vid/pid在/dev/serial/by-id中创建符号链接(symbolic link)

例如,vid = 1199 和 pid 683c 的 Sierra Wireless MC8795V 调制解调器。我知道端口 3 始终是 AT 命令 channel 。因此,您可以创建一个符号链接(symbolic link),并在末尾添加 -AT。

在通过 AT 命令检测的情况下,最好和更常见的方法是执行 AT 命令以查看 tty 是否有响应。如果您将调制解调器配置为不回显,您应该得到回显或 OK。

例如:

AT
AT
OK

如果您收到响应,则表示您找到了 AT 控制端口或 PPP 端口。要检查这一点,只需执行 ATI 命令。如果响应包含 APP1、APP2、APP3,那么您将访问 PPP 端口。否则你会找到你的 AT 控制端口。

例如一个AT控制端口:

ATI
Manufacturer: Sierra Wireless, Incorporated
Model: MC8795V
Revision: K2_0_7_46AP C:/WS/FW/K2_0_7_46AP/MSM6290/SRC 2010/10/27 22:15:30
IMEI: XXXXXXXXXXXXXXX
IMEI SV: 20
FSN: D9A2160146410
3GPP Release 6
+GCAP: +CGSM,+DS,+ES


OK

例如 PPP 端口:

ATI
Sierra Wireless, Incorporated
MC8795V
APP1

OK

不过要提醒一句。对于 Sierra Wireless 模块,它们清楚地显示了哪个端口。对于其他制造商,您需要查看 USB 接口(interface)指南,看看是否可以通过 ATI 采取这种方法。

关于linux - 如何检测属于 gsm/3g-modem 的 tty 是数据端口还是控制端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5477882/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com