avrdude: ser_open(): 无法打开设备“/dev/ttyACM0”: 设备或资源忙

avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busy

我是 Linux Mint user.I 正在处理 Arduino Yun.I 正在编译 Arduino program.After 我正在上传到 Arduino Yun.Then 我得到这些 error.Can你帮帮我?

首先需要确保您拥有正确的read/write权限,如here所述,基本上输入以下命令:

$ sudo adduser <username> dialout
$ sudo chmod a+rw /dev/ttyACM0

'/dev/ttyACM0' 是您的 arduino 连接到的端口,它应该列在您根目录的 /dev 文件夹中。

second: 在你确定了arduino连接到哪个端口并且你为这个端口设置了正确的权限之后,你需要运行下面的命令。我不确定它的作用,我不确定它是否真的需要,但它让我上传了好几次

$ sudo udevadm trigger

找到这个命令here: http://starter-kit.nettigo.eu/2015/serial-port-busy-for-avrdude-on-ubuntu-with-arduino-leonardo-eth/

third,你会发现上传有时是一个时间和运气的挑战。继续按下重置(有时连续两次),同时按下 arduino sketch 的上传按钮。在某个时刻,它会起作用。我在不断更改代码中的小块时运气更好,所以当我按下 'upload' 时,它必须先编译代码。

https://www.arduino.cc/en/Guide/Troubleshooting#upload

在某些计算机上,您可能需要按下重置按钮

我从来没有弄乱过引导加载程序,也没有弄乱过 ICSP 引脚等(幸运的是)

也可以看看 Arduino forum 或 link provide by yourself

我的 Leonardo 板和 Ubuntu 确实有问题。添加规则告诉 ModemManger 忽略提到的 link 中的所有 USB 设备对我不起作用。然而,删除 modemmanager 实际上做到了。

sudo apt-get purge modemmanager

确保您的 USB 数据线已牢固插入。因此,我的突然停止工作。出现“/dev/ttyACM0 未找到”消息是因为除非插入设备,否则不会创建设备。

对我一直有效的解决方案是转到 Tools -> Port -> /dev/ttyACMx 并再次单击所选端口。

之后IDE上传代码没有问题。

使用

sudo arduino

这将修复一次

sudo chmod a+rw /dev/ttyACM0

运行 第一次上传请按以下命令

当进程连接到我试图用于加载代码的端口时,我收到此消息,例如屏幕或 gtkterm。

试试这个命令:

lsof /dev/ttyACM3

为您的设备使用 ACM。如果出现问题,例如

screen  8610  elm    5u   CHR  166,3      0t0 5599015 /dev/ttyACM3

然后杀掉PID:

kill 8610

清除正在使用该端口的进程。

只是为了添加一个对我有用的新解决方案(也在 Linux Mint 下) 我打开了串行监视器(从打开的 4 个 arduino IDE 之一)并关闭它就成功了(可能与上面描述的过程问题有关)

我不认为更改端口的权利是个好主意。我找到了更好的解决方案。它是 运行 Arduino 与 sudo。这是如何操作的指南。首先,找到 Arduino 的 .desktop 文件。它可能位于 /usr/share/applications/~/.local/share/applications/。名称也可能不同,但肯定会包含“arduino”。对我来说是 /usr/share/applications/arduino.desktop。然后用sudo nano <your arduino.desktop file>打开它。 sudo nano /usr/share/applications/arduino.desktop 适合我。它将包含类似的内容:

[Desktop Entry]
Type=Application
Name=Arduino IDE
GenericName=Arduino IDE
Comment=Open-source electronics prototyping platform
Exec=arduino %U
Icon=arduino
Terminal=false
Categories=Development;IDE;Electronics;
MimeType=text/x-arduino;
Keywords=embedded electronics;electronics;avr;microcontroller;
StartupWMClass=processing-app-Base

现在找到以 Exec= 开头的行。对我来说是 Exec=arduino %UExec= 之后的所有内容都是启动 Arduino 的命令。对我来说是 arduino %U。我们需要用 sudo 启动这个命令。然后在该命令前键入 echo "<your password>" | sudo -S。并使用 Ctrl+O 保存文件。现在 Exec 行将类似于 Exec=echo "blahblah" | sudo -S arduino %U,其中 blahblah 是您的密码。完成了!现在它应该工作了。如果没有,则尝试重新启动。但是还有一个问题。现在 Arduino IDE 将默认将草图保存在 /root/Arduino/(它应该将草图保存在 /home/<username>/Arduino/)。这不好。但它可以很容易地在 Arduino 的设置中修复。此外,现在您几乎可以使用 Arduino IDE 编辑系统中的每个文件。所以要小心,不要弄坏东西。

编辑:我错了。 sudo usermod -a -G uucp $USERsudo usermod -a -G dialout $USERreboot 效果更好。

我的正版 Arduino Mega 2560 尝试使用本地编译的 Arduino IDE 版本 1.8.16 从 Ubuntu 18.04.5 LTS 机器连接到它时遇到了这个问题。我能够在我的情况下修复它,所以在这里发帖分享技巧。

遇到其他几个报告相同症状的论坛主题(尽管并非所有都是 Mega,也不是所有都在 Linux 上):

经过几个小时的故障排除后,我能够可靠地连接到我的 Mega。事实证明,有多个问题阻碍了它的工作,必须了解和解决这些问题,当我意识到它们是什么时,我简直不敢相信自己的眼睛。

建议确保配置 udev 规则以防止 ModemManager 占用 Mega 设备,从而使其对 Arduino IDE 不可用的发布者是在正确的轨道上。所以我检查了我的 /etc/udev/rules.d/70-snap.core.rules 并确实确认已经有一条规则让 ModemManager 忽略 USB 供应商 ID 为 2341 的设备,这是真正的 Arduino:

...
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
...

但是,当我执行 tail -f /var/log/syslog 并插入 Mega 时,我简直不敢相信自己的眼睛,因为我看到 ModemManager 仍在尝试与它通信:

Dec  9 22:09:58 hostname ModemManager[999]: <info>  [device /sys/devices/pci0000:00/0000:00:14.0/usb3/3-2] creating modem with plugin 'Generic' and '1' ports
Dec  9 22:09:58 hostname ModemManager[999]: <warn>  Could not grab port (tty/ttyACM0): 'Cannot add port 'tty/ttyACM0', unhandled serial type'
Dec  9 22:09:58 hostname ModemManager[999]: <warn>  Couldn't create modem for device '/sys/devices/pci0000:00/0000:00:14.0/usb3/3-2': Failed to find primary AT port

看起来 ModemManager 仍在尝试将其作为非 USB TTY 设备连接。

问题变得更加严重,因为 Arduino IDE 没有妥善处理这个问题,即使在我从 USB 拔下它后,它仍然挂起并尝试连接到 Mega。尽管如此,我做了一个快速 ps -ef | grep ModemManager 然后 kill [PID],等到 Arduino IDE 停止尝试连接到断开连接的 Mega,然后将其重新插入,通过 [=55 指定端口=] -> 'Port',并再次尝试上传,效果非常好。 (相反,如果我只是等待 /var/log/syslog 等待 ModemManager 放弃并释放设备 Arduino IDE 也可能在没有我明确杀死 ModemManager 的情况下工作。这可能解释了为什么它偶尔工作。)

然后我认为我解决了所有问题并开始将 Mega 固定到我的设备中。我拧紧连接紧固件,再次无法相信我的眼睛它又停止工作了。把 Mega 拿回来,松开整个板子,现在它可以工作了,用螺栓把它拧回去,然后它就停止工作了。几轮之后,将导致此问题的原因与在引脚 A6 旁边的孔中使用黄铜支架相关联。我推测金属支座正在短路或以某种方式干扰 运行 非常靠近该孔的 PCB 走线。所以停止在那个洞里用螺栓固定,Mega 开始正常工作组装到我的设备中。

所以在我的例子中,有 2 个问题阻止了 Mega 工作和 PC 通过 USB 连接到它:

(1) 尽管有 udev USB 规则,ModemManager 一插入就占用设备。解决方案——杀死 ModemManager(仍然需要研究修改系统配置,这样我就不必每次都杀死它)。

(2) 金属立管干扰引脚 A6 旁边的孔附近的 PCB 迹线的硬件问题。解决方案——停止在该孔中螺栓连接。

希望这对您有所帮助。