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

前端之家收集整理的这篇文章主要介绍了linux – 如何检测属于gsm/3g-modem的tty是数据还是控制端口?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

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

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

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

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

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

例如,具有vid = 1199和pid 683c的Sierra Wireless MC8795V调制解调器.我知道端口3始终是AT命令通道.因此,您可以在末尾创建一个使用-AT后固定的符号链接.

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

例如:

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接口指南,看看是否可以通过ATI采用这种方法.

猜你在找的Linux相关文章