我有一个 Sierra Wireless USB 308 调制解调器,用于向客户发送 SMS 消息以及从客户接收 SMS 消息。
当插入该单个设备时,系统会创建多个设备文件:/dev/ttyUSB0
, /dev/ttyUSB1
, /dev/ttyUSB2
, /dev/ttyUSB3
.我在某处读到,发送短信必须使用第三个设备文件(/dev/ttyUSB2
)。我在用着短信工具。
问题:
- 为什么单个设备会在
/dev
目录下产生多个设备文件? - 我希望能够符号链接
/dev/ttyUSB2
到/dev/sms-sierra
.当在每个设备文件(其中“XXX”是“0”、“1”、“2”或“3”)上运行时udevadm info -a /dev/ttyUSBXXX
,每个“设备”的信息几乎相同。由于设备编号并不总是相同,因此如何编写udev
规则来检测要使用的适当设备编号?
对于问题1,我不知道。对于问题 2,是否需要一个程序来探测设备文件是否可以发送 SMS(例如,通过查看它是否响应适当的调制解调器“AT”命令)?
答案1
这很常见,但仍然很神秘。泰利特和华为调制解调器做同样的事情。至少泰利特,指定他们中有多少人Linux USB 驱动程序 - 用户指南。
例如,对于我目前使用的 Telit LE910,USB PID 是 0x1201,它被列为通过串行提供到 Linux“5 ports /dev/ttyUSBx”。相应的表格上有一个奇怪的脚注,指出:
并非所有调制解调器暴露的端口都可以用于 AT 命令发送:端口排列说明请参阅相应的 AT 命令用户指南。
追踪“AT 命令”线索结果是徒劳无功。相反,搜索“端口排列描述”会显示更多信息,有些具有误导性,有些具有启发性。此图像出现在“TELIT 3G 模块端口排列用户指南”中:
注意绿色通道。调制解调器有一个“虚拟串行设备”,当通过 USB 连接到计算机 (DTE) 时,会提供多个“USB 通道”。这些通道到调制解调器“接入点”的映射是可配置的。 “AT0”、“AT1”、“AT2”接入点似乎提供并发 AT 命令会话。 “TT”接入点似乎是一个旧的通信接口,与“TTC 工具”一起使用以创建“TTC 连接”。最后,GPS 接入点是一个标准 GNSS 接口,可以提供 NMEA 语句。
因此,根据您的调制解调器的配置方式,我希望您的ttyUSB
设备是这些接入点的某种排列。
例如,通过反复试验,在我的例子中,前两个和最后一个(ttyUSB0
、ttyUSB1
和ttyUSB4
)不是 AT 端口,而另外两个是(ttyUSB2
和ttyUSB3
)。
所以你的问题2的答案是:你不能。由调制解调器的配置来确定哪个设备连接到哪个功能。
答案2
问题 1:内核为并发请求创建多个 ttyUSB,当它连接到其他程序(WvDial、pppd、ModemManager 等)时,您不能使用 /dev/ttyUSB0 发送短信。
问题2: 小型计算机