我在 Arch Linux 笔记本电脑上使用 Arduino IDE 时没有遇到问题,但一段时间/几个月后,由于权限问题,我无法上传草图:
avrdude: ser_open(): can't open device "/dev/ttyACM0": Permission denied
我可以毫无问题地访问和写入设备minicom
,因为权限很好:
crw-rw-rw- 1 root uucp
我的用户在uucp
组中。但是当我开始上传草图时,关于dmesg
,USB 设备正在重新连接,此时我可以看到不同的权限:
rw------- 1 root root
经过一段时间(几秒)后,权限恢复原状。dmesg
输出如下:
[ 313.042695] usb 2-1.2: USB disconnect, device number 3
[ 313.253085] usb 2-1.2: new full-speed USB device number 4 using ehci-pci
[ 313.352387] cdc_acm 2-1.2:1.0: ttyACM0: USB ACM device
[ 321.234517] usb 2-1.2: USB disconnect, device number 4
[ 321.439445] usb 2-1.2: new full-speed USB device number 5 using ehci-pci
[ 321.541392] cdc_acm 2-1.2:1.0: ttyACM0: USB ACM device
...
我尝试使用几个自定义 udev 规则来解决这个问题,但没有成功:
SUBSYSTEMS="usb", ATTRS{idVendor}== "2341", GROUP="uucp", MODE="0666"
KERNEL=="ttyACM[0-9]*", SYMLINK+="%k", GROUP="uucp", MODE="0666"
如何从系统中出现的第一刻起强制组或模式?我希望这不仅仅是 Arduino 1.8.3 中的一个错误。内核版本 4.11.9-1-ARCH。
编辑#1:
我发现退出后minicom
也会发生 USB 重新连接行为,但在这种情况下avrdude
是个问题,因为它发生在程序需要访问设备时。
截屏直播这里
编辑#2:
过了一段时间我又回过头来研究这个问题,发现只有ttyACM0
(Yun/Micro/etc. 用 microUSB 线连接) 和ttyUSB0
(Uno 用 USB-B 连接) 有问题。但即使是这个有趣的线索,我也没法弄清楚。
我正在监控 tty 设备上的权限:
watch -n 0.1 'ls -la /dev/ttyUSB* /dev/ttyACM*'
- 当上传
ttyUSB0
日期/时间发生变化且一切正常时 - 当上传到
ttyACM0
设备消失片刻后,又root:root
创建了一个具有错误权限(和 )的新设备,上传失败,然后 udev 正确设置了权限(使用root:uucp
)...然后是另一个循环(消失-错误-正确)
我的用户在lock
和uucp
组中,我尝试添加一些 udev 规则或禁用它们,但没有成功......
我 99% 确信这是 udev 规则触及它之前的事情。
答案1
我遇到了同样的问题,我删除了 tlp 包,这个问题就消失了。