【问题标题】:avrdude: ser_open(): can't open device "/dev/ttyACM0": Device or resource busyavrdude:ser_open():无法打开设备“/dev/ttyACM0”:设备或资源忙
【发布时间】:2017-04-18 12:23:41
【问题描述】:

我是 Linux Mint 用户。我正在处理 Arduino Yun。我正在编译 Arduino 程序。之后我正在上传到 Arduino Yun。然后我收到这些错误。你能帮帮我吗?

【问题讨论】:

    标签: linux arduino linux-mint


    【解决方案1】:

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

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

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

    第二个:在您确定了 arduino 连接到哪个端口并为此端口设置了正确的权限后,您需要运行以下命令。我不确定它的作用,我不确定它是否真的需要,但它使上传多次为我工作

    $ sudo udevadm trigger
    

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

    第三,您会发现上传有时是时间和运气的挑战。继续按下重置(有时非常连续两次),同时按下你的 arduino 草图的上传按钮。在某个时刻,它会起作用。在不断更改代码中的小片段时我更幸运,所以当我推送“上传”时,它必须先编译代码。

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

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

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

    还可以查看Arduino forum 或链接provide by yourself

    【讨论】:

    • 谢谢,这也是一个有用的链接。
    • 确实是非常好的链接,为了完整起见,我已将其添加到“答案”中,可以吗?
    【解决方案2】:

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

    sudo apt-get purge modemmanager

    【讨论】:

    • 我认为有人应该提交上游错误报告 - 告诉调制解调器管理器不要继续尝试。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      对我有用的解决方案始终是转到Tools -&gt; Port -&gt; /dev/ttyACMx 并再次单击所选端口。

      IDE 上传代码后没有问题。

      【讨论】:

      • 我猜,当您选择端口时,Arduino IDE 会进行一些握手或类似操作。有时它有助于“重新启动”连接。但这只是一个假设。
      • 同意。现在我总是在对 Arduino 进行编程之前仔细检查电路板和 IO,它运行良好。
      • 我现在每天看到的另一个假设是,这可能取决于您(重新)选择端口后等待的时间。 Ma-a-aybe IDE 确实会时不时地重试一次,并且偶尔会成功 [x]。尽管如此,在多次上传失败后立即点击Ctrl+U - 有助于 [x]。点击Ctrl+U 快速将IDE 运行到ConcurrentMidificationException - 这解决了问题 - 有助于[x]。 PS:在草图上传期间打开Serial Monitor 总是会打开串行监视器并总是将其连接到正确的端口/设备 - 帮助 [x]。
      【解决方案5】:

      使用

      sudo arduino
      

      这将修复一次

      【讨论】:

        【解决方案6】:
        sudo chmod a+rw /dev/ttyACM0
        

        第一次上传时运行以下命令

        【讨论】:

          【解决方案7】:

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

          试试这个命令:

          lsof /dev/ttyACM3
          

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

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

          然后杀死PID:

          kill 8610
          

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

            • 这对我也有用,只需关闭 IDE 窗口。
            【解决方案9】:

            我不认为更改端口的权利是一个好主意。我找到了更好的解决方案。它是用 sudo 运行 Arduino。这是如何做到这一点的指南。首先,找到 Arduino 的 .desktop 文件。它可能位于/usr/share/applications/~/.local/share/applications/。名称也可能不同,但肯定会包含“arduino”。对我来说是/usr/share/applications/arduino.desktop。然后用sudo nano &lt;your arduino.desktop file&gt; 打开它。 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 "&lt;your password&gt;" | sudo -S。并使用Ctrl+O 保存文件。现在Exec 行将类似于Exec=echo "blahblah" | sudo -S arduino %U,其中 blahblah 是您的密码。它已经完成了!现在它应该可以工作了。如果没有,请尝试重新启动。但是还有一个问题。现在,Arduino IDE 默认将草图保存在/root/Arduino/(它应该将草图保存在/home/&lt;username&gt;/Arduino/)。这不好。但它可以在 Arduino 的设置中轻松修复。现在您还可以使用 Arduino IDE 编辑系统中的几乎每个文件。所以要小心,不要破坏任何东西。

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

            【讨论】:

              【解决方案10】:

              我的 Genuine 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 后,它仍然挂起并尝试连接到 Mega。尽管如此,我还是做了一个快速的ps -ef | grep ModemManager 然后kill [PID],等到 Arduino IDE 停止尝试连接到断开连接的 Mega,然后重新插入,通过“工具”->“端口”指定端口,然后再次尝试上传,它就像一个魅力。 (相反,如果我只是等待观看 /var/log/syslog 让 ModemManager 放弃并释放设备 Arduino IDE 可能在没有我明确杀死 ModemManager 的情况下也可以工作。这可能解释了为什么它偶尔会工作。)

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

              所以在我的例子中,有两个问题是阻止 Mega 工作并且 PC 无法通过 USB 连接到它:

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

              (2) 金属立管的硬件问题会干扰引脚 A6 旁边孔附近的 PCB 走线。解决方案 - 停止在那个孔中螺栓。

              希望这有帮助。

              【讨论】:

                猜你喜欢
                • 2018-10-25
                • 1970-01-01
                • 2012-07-17
                • 2023-03-06
                • 2023-02-10
                • 2017-09-02
                • 2012-01-28
                • 1970-01-01
                • 2012-04-03
                相关资源
                最近更新 更多