我使用的设备通过 usb-com 串行适配器连接到我的 Linux (Fedora21) PC。当设备连接并在系统中创建 /dev/ttyACM0 时,系统会发送一系列调制解调器 AT 命令以进行初始化。
由于我的设备不是调制解调器,我想禁用该行为。
那么问题是,如何禁用此类探测?
答案1
探测端口的东西很可能是 ModemManager,它是 NetworkManager 套件的一部分。
如果您的系统中没有安装(经典或 wwan)调制解调器,最简单的方法就是从系统中删除 ModemManager。如果您确实有这样的调制解调器,那么您可以添加 udev 规则来向 ModemManager 发出信号,表明该设备不是调制解调器,并且它甚至不应该探测它:
ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", ENV{ID_MM_DEVICE_IGNORE}="1"
其中1234
是您设备的供应商 ID 和5678
产品 ID(您可以使用 找到它们lsusb
)
答案2
这是帮助我使用 ModemManager 1.10.0 --filter-policy=strict
(Ubuntu 18.04)的解决方案
ModemManager -V
您可以了解更多:常见的 udev 标签
创建一个文件/etc/udev/rules.d/49-stm32.rules
并添加以下内容:
# 0483:5740 - STM32 in USB Serial Mode (CN5)
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_BLACKLIST}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{MTP_NO_PROBE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_PORT_IGNORE}="1"
ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", ENV{ID_MM_TTY_MANUAL_SCAN_ONLY}="1"
保存文件并运行后:
sudo udevadm control --reload-rules
并且(也许没有必要):
sudo systemctl restart ModemManager.service
重新连接 USB 设备(物理拔出并插入 USB 端口)并享受。
PS这是STM32 CDC Virtual Com端口的解决方案 - 如有必要,您可以更改PID / VID和udev标签。