我在 arch linux 上使用 arduino ide,并通过 USB 连接 arduino uno。我确信我在 ide 菜单中选择了正确的端口和板。
当我跑步时ls -l /dev/ttyACM*
我得到:
crw-rw---- 1 root uucp 166, 0 14. dub 12.44 /dev/ttyACM0
crw-rw-rw- 1 root uucp 166, 1 14. dub 12.54 /dev/ttyACM1
但是当我点击上传时出现此错误:
Sketch uses 440 bytes (1%) of program storage space. Maximum is 32256 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
avrdude: Version 6.3, compiled on Jul 7 2020 at 19:38:43
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "//etc/avrdude.conf"
User configuration file is "/home/john/.avrduderc"
User configuration file does not exist or is not a regular file, skipping
Using Port : /dev/ttyACM1
Using Programmer : arduino
Overriding Baud Rate : 115200
avrdude: ser_open(): can't open device "/dev/ttyACM1": Input/output error
avrdude done. Thank you.
the selected serial port
does not exist or your board is not connected
最新的 Linux 内核和 LTS 上仍然存在错误。
我的设备是 Lenovo thinkpad X390:Linux 5.11.14-arch1-1
当我将 arduino 插入 USB 然后运行时,sudo dmesg
我收到以下消息:
[ 1605.378324] usb 1-4: new full-speed USB device number 14 using xhci_hcd
[ 1605.520509] usb 1-4: New USB device found, idVendor=2341, idProduct=0043, bcdDevice= 0.01
[ 1605.520517] usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 1605.520521] usb 1-4: Manufacturer: Arduino (www.arduino.cc)
[ 1605.520523] usb 1-4: SerialNumber: 7583434383935150E152
[ 1605.523881] cdc_acm 1-4:1.0: ttyACM1: USB ACM device
[ 1630.618749] usb 1-9: reset full-speed USB device number 10 using xhci_hcd
[ 1630.792727] audit: type=1130 audit(1618567069.016:82): pid=1 uid=0 auid=4294967295 ses=4294967295 msg='unit=fprintd comm="systemd" exe="/usr/lib/systemd/systemd" hostname=? addr=? terminal=? res=success'
[ 1632.601215] audit: type=1100 audit(1618567070.822:83): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication grantors=? acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=failed'
[ 1635.720577] audit: type=1100 audit(1618567073.942:84): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:authentication grantors=pam_faillock,pam_permit,pam_faillock acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.721507] audit: type=1101 audit(1618567073.942:85): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:accounting grantors=pam_unix,pam_permit,pam_time acct="john" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.722751] audit: type=1110 audit(1618567073.946:86): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:setcred grantors=pam_faillock,pam_permit,pam_faillock acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
[ 1635.727018] audit: type=1105 audit(1618567073.949:87): pid=29714 uid=1000 auid=1000 ses=1 msg='op=PAM:session_open grantors=pam_limits,pam_unix,pam_permit acct="root" exe="/usr/bin/sudo" hostname=? addr=? terminal=/dev/pts/1 res=success'
我怎样才能解决这个问题 ?
谢谢你的帮助
附:如果您需要更多信息,请在下面评论,我会尽快添加。
答案1
解决方案来源这里这对我有用:
我做了更多的测试,并为我找到了另一个可行的解决方案。您是否已
tlp
安装并启用?显然有一个叫做 USB 自动挂起的东西,并且 tlp 默认启用它(这可能是明智的)。我所做的就是编辑文件
/etc/tlp.conf
并更改#USB_AUTOSUSPEND=1
->USB_AUTOSUSPEND=0
.重新启动后,即使在最新的内核 5.11.16 上,我也能够上传到 arduino。我试图通过 udev 规则禁用自动挂起,但我做不到。我想也许
tlp
配置优先于 udev 规则,尽管我根本不确定。
答案2
我遇到了同样的问题,唯一对我有帮助的解决方法是在 grub 配置中禁用 USB 自动挂起。
禁用它后我可以很好地使用我的arduino板。
所以我做了:
sudo vim /etc/default/grub
- 搜索这一行
GRUB_CMDLINE_LINUX_DEFAULT=""
(引号内可能已经填充了不同的内容) - 将其更改为包含
usbcore.autosuspend=-1
引号内的某个位置 - 跑步
sudo update-grub
- 然后重新启动
这对我很有帮助,因为经过大量谷歌搜索后我意识到问题实际上是每当我尝试使用arduino时它都会重新连接。因此,当使用 minicom 访问串行输出时,arduino 会立即断开连接并再次连接。我只是在使用watch -n 1 ' sudo dmesg | tail -n 20'
查看运行 minicom 时发生的情况时才注意到它 。
在 grub 内禁用自动挂起后,这种行为应该会改变。
答案3
看起来最新的 Manjaro 更新不知何故导致了CDC_acm要破坏的模块..为了解决这个问题,我运行了以下命令:
sudo modprobe -r cdc_acm
sudo modprobe cdc_acm
sudo chmod 666 /dev/ttyACM0