avrdude
是一个简单的工具,允许将程序下载到目标微控制器。为了完整起见,我尝试发出的命令是:
avrdude -p atmega328p -c usbtiny -P usb -v -U -flash:w:program.hex
每次我发出此命令时,我都会遇到错误'Operation not permitted"
,并且需要执行此命令sudo avrdude ..
才能使其正常工作。我觉得很奇怪有必要这样做,所以我更深入地研究这个问题。
我使用的程序员自行安装/dev/ttyUSB0
并成为该组的一部分dialout
。此外,该设备具有权限,使得dialout
组中的任何用户都能够写入该设备,这就是上面命令的作用。
crw-rw---- 1 root dialout 188, 0 Jul 15 02:04 ttyUSB0
尽管root
拥有设备,只需将我自己添加到拨出组似乎就足以让我自己使用该设备。做完这件事后,我仍然遇到了错误"Operation not permitted"
。
然后我想,也许avrdude
程序本身就是问题所在。在找到二进制文件后,/usr/bin
很明显,考虑到文件的权限,这不是问题。
-rwxr-xr-x 1 root root 413888 Oct 21 2013 avrdude
太长了;博士我是适当组的一部分,并且文件具有允许我使用它们的权限,但如果不首先提升自己的权限,我仍然无法使用它们。
答案1
USB 设备的低级控制是通过 完成的/dev/bus/usb
,您需要在设备上设置正确的权限。做到这一点的方法是使用 udev 规则:
使用以下命令创建文件(例如/etc/udev/rules.d/52_local-usbtiny.rules
):
SUBSYSTEM=="usb", ATTR{idVendor}=="1781", ATTR{idProduct}=="0c9f", MODE="664", GROUP="plugdev"
这将小组设置为plugdev
;您可以使用USER="your-user-name"
它来设置所有者。
然后重新加载 udev(例如,service udev force-reload
或systemctl reload udev
)。下次拔下/重新插入编程器时,新权限应该生效。