有没有办法在 Linux 中自动检测调制解调器设备,然后将它们符号链接到/dev/modem
使用 udev 规则?
目前,我编写了一个程序来探测每个串行端口,发送AT
并等待OK
。我有一个 udev 脚本,可以为每个 ttyS 和 ttyUSB 设备运行此脚本。然而,我现在获悉还有其他设备,例如 OBD-II 诊断桥,也可以使用 AT 命令。
答案1
你可以玩一点cts,实时传输或其他串行状态线,并检查调制解调器是否相应地响应降低/升高该信号。但是您的调制解调器可能被配置为忽略这些线路,或者可能有其他设备也会对这些更改做出反应。
我认为普苏西得到了正确的答案。
我记得我曾经调试过hylafax
它是如何导出调制解调器类型的。基本上它的作用与您相同 - 发送 AT 命令并检查“典型”答案。
答案2
检测各个串口的属性。查看供应商和型号字符串。例如,
# udevadm info --query="property" --name=/dev/ttyUSB0**
UDEV_LOG=3
DEVPATH=/devices/platform/orion-ehci.0/usb1/1-1/1-1:1.0/ttyUSB0 /tty/ttyUSB0
MAJOR=188
MINOR=0
DEVNAME=/dev/ttyUSB0
SUBSYSTEM=tty
ID_PORT=0
ID_PATH=platform-orion-ehci.0-usb-0:1:1.0
ID_VENDOR=FTDI
ID_VENDOR_ENC=FTDI
ID_VENDOR_ID=0403
ID_MODEL=FT232R_USB_UART
ID_MODEL_ENC=FT232R\x20USB\x20UART
ID_MODEL_ID=6001
ID_REVISION=0600
ID_SERIAL=FTDI_FT232R_USB_UART_A40135O1
ID_SERIAL_SHORT=A40135O1
ID_TYPE=generic
ID_BUS=usb
ID_USB_INTERFACES=:ffffff:
ID_USB_INTERFACE_NUM=00
ID_USB_DRIVER=ftdi_sio
ID_IFACE=00
ID_VENDOR_FROM_DATABASE=Future Technology Devices International, Ltd
ID_MODEL_FROM_DATABASE=FT232 USB-Serial (UART) IC
DEVLINKS=/dev/char/188:0 /dev/serial/by-path/platform-orion-ehci.0-usb-0:1:1.0-port0 /dev/serial/by-id/usb-FTDI_FT232R_USB_UART_A40135O1-if00-port0