在 Ubuntu 16/18 下,ttyACM 在连接时发送不需要的 AT 命令 - 如何停止?

在 Ubuntu 16/18 下,ttyACM 在连接时发送不需要的 AT 命令 - 如何停止?

我有一些运行嵌入式 Linux(内核版本相对较旧)的外部硬件,松散地基于旧的DaVinci DA850开发板。

它使用小工具串行连接通过 USB 端口与主机 PC 进行通信。在外部硬件上,这ttyGS0通常称为。

在 PC 端,Windows 小工具串行驱动程序运行良好。这也在 Ubuntu 14 上进行了测试,并且再次完美运行。值得注意的是,Ubuntu 14 也识别了该端口ttyGS0。我们最近在 Ubuntu 16 和 Ubuntu 18 上重新测试,发现这不起作用。它们具有新的 USB 系统,现在将端口识别为ttyACM0替代。

检查为什么这不起作用,外部硬件正确接收消息,但 PC 端应用程序没有收到来自 的回复read()。像往常一样,我正在使用read()和的标准模式select()来超时读取。也许还很重要的是,在第一次连接时,端口总是发送“AT”三次。

这对我来说表明ttyACM小工具串行的新风格正在尝试进行海耶斯式握手,因此无法进一步进行,因为外部硬件期望它像哑RS-232端口一样工作。遵循来自的提示@JdeBP,我跑了systemctl status ModemManager.service,我看到了

Jun 02 21:10:58 XUbuntu-18 ModemManager[402]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1': Failed to find primary AT port
Jun 02 21:52:36 XUbuntu-18 ModemManager[402]: <info>  [device /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1] creating modem with plugin 'Generic' and '1' ports
Jun 02 21:52:36 XUbuntu-18 ModemManager[402]: <warn>  Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Jun 02 21:52:36 XUbuntu-18 ModemManager[402]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1': Failed to find primary AT port
Jun 02 22:36:50 XUbuntu-18 ModemManager[402]: <info>  [device /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1] creating modem with plugin 'Generic' and '1' ports
Jun 02 22:36:50 XUbuntu-18 ModemManager[402]: <warn>  Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Jun 02 22:36:50 XUbuntu-18 ModemManager[402]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1': Failed to find primary AT port
Jun 02 22:41:38 XUbuntu-18 ModemManager[402]: <info>  [device /sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1] creating modem with plugin 'Generic' and '1' ports
Jun 02 22:41:38 XUbuntu-18 ModemManager[402]: <warn>  Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Jun 02 22:41:38 XUbuntu-18 ModemManager[402]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:0b.0/usb1/1-1': Failed to find primary AT port

这似乎与AT我在另一端看到的三个消息相一致。

尽管正在运行mmcli --list-modems,但它说No modems were found

ttyGS当他们从小工具序列转向更新的样式时,有人以前见过类似的东西吗ttyACM?我已经用谷歌搜索了这个,阅读了所有有关小工具序列的文档ACM,并检查了有关串行连接AT命令的任何内容ACM,但我找不到任何似乎可以回答这个问题的内容。

我还尝试检查termios设置(与原来有效的版本相比没有改变),但似乎没有什么异常。

答案1

看起来 ModemManager 正在尝试探测该端口,这可能是ATs 的来源。这些可能会使另一端的设备感到困惑。

您可能需要设置一条 udev 规则来告诉 ModemManager 不要插手该设备。例如,您可以将其放入/etc/udev/rules.d/01-disable-mm-ttyACM.rules

KERNEL=="ttyACM*", ENV{ID_MM_DEVICE_IGNORE}="1"

要使新规则生效,您可能需要运行sudo udevadm control --reload-rules.然后断开并重新连接设备,并查看 ModemManager 现在是否会忽略该设备。

相关内容