在Arch Linux上插入Arduino后无法立即打开端口错误

时间:2018-11-05 23:57:34

标签: arduino archlinux platformio

我正在使用PlatformIO进行编程,并使用Arduino Mega和Arduino Uno。我通过串行连接了它们,因此每次我要对其编程时,都必须将它们彼此断开。我还从计算机上拔下了它们的插头,以免在四处移动电线时不小心炸掉它们。

每次我将一个或另一个插入后尝试立即对其进行编程时,都会收到此错误消息:

*** [upload] could not open port /dev/ttyACM0: [Errno 16] Device or resource busy: '/dev/ttyACM0'

如果我等待大约一分钟然后重试,那么代码将被成功上传。可能是什么原因造成的?

1 个答案:

答案 0 :(得分:4)

ModemManager可能是造成您麻烦的原因。尝试使用禁用它,例如pkill -STOP ModemManager(继续执行-CONT)。

ModemManager是一款出色的软件,可使您的3G软件狗自动运行。由于Arduino是作为串行调制解调器出现的,因此ModemManager试图对其进行控制。

您可以通过将某个变量附加到设备来阻止ModemManager执行此操作。有关详情,请参见the documentation。本质上,创建udev规则,例如/etc/udev/rules.d/99-ttyacms.rules,其中包含以下内容:

ATTRS{idVendor}=="0ca6" ATTRS{idProduct}=="a050", ENV{ID_MM_DEVICE_IGNORE}="1

当然,您需要使用ID。使用lsusb查找这些值。

创建此文件后,使用类似sudo udevadm control --reload-rules

的方式重新加载udev。