linux – 如何检测属于gsm/3g-modem的tty是数据还是控制端口?
我正在为linux路由器编写一个小工具,当我将适当的调制解调器插入其USB端口时,它建立了一个wwan(gsm / 3g)连接.当插入设备时,几个ttys被注册,我目前维护一个制造商和设备列表,他们注册的ttys是控制/数据端口. 如果可能的话,我想摆脱这个列表并找到一种方法以某种方式直接探测已注册的ttys以检查它们是控制端口还是数据端口. 我检查了wvdial和modem-manager的源代码,看看这些工具如何检测正确的端口但无法找到合适的信息.我还试图在sysfs中查找信息以区分端口,但这也不成功. 最佳答案
您无法通过外部手段检测到这一点.通常的做法是为特定的调制解调器制造商和型号设置udev规则.或者您可以按顺序连接到每个tty并通过AT命令验证它是什么类型的端口.
对于udev规则,您可以遵循以下过程: 1)检测调制解调器vid和pid 例如,具有vid = 1199和pid 683c的Sierra Wireless MC8795V调制解调器.我知道端口3始终是AT命令通道.因此,您可以在末尾创建一个使用-AT后固定的符号链接. 在通过AT命令检测的情况下,最好和更常见的方法是执行AT命令以查看tty是否响应.如果您的调制解调器配置为不回显,则应该回显或回复. 例如:
如果您收到回复,则表示您找到了AT控制端口或PPP端口.要检查这一点,只需执行ATI命令即可.如果响应包含APP1,APP2,APP3,则您点击PPP端口.否则你找到了你的AT控制端口. 例如AT控制端口:
例如PPP端口:
但是有一个警告的话.在Sierra Wireless模块??的情况下,他们清楚地显示哪个端口是哪个.对于其他制造商,您需要检查USB接口指南,看看是否可以通过ATI采用这种方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |