执行idf.py -p /dev/ttyACM0 flash下载时,提示这个错误
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyACM0: [Errno 13] Permission denied: '/dev/ttyACM0'
解决方法:
1检查串行端口 /dev/ttyUSB0
是否已被其他程序占用,可以使用以下命令查看
lsof /dev/ttyUSB0
如果已被占用,您可以尝试关闭占用端口的程序,或者使用其他可用的串行端口。
2确认您的用户具有访问 /dev/ttyACM0
的权限。您可以使用以下命令检查
ls -l /dev/ttyACM0
您应该能够看到该设备文件的权限设置。如果您的用户没有访问该设备的权限,可以使用以下命令更改权限:
sudo chmod a+rw /dev/ttyACM0
这将授予所有用户对该设备的读写权限。
如果您使用了 sudo chmod a+rw /dev/ttyUSB0
命令将 /dev/ttyUSB0
的权限设置为读写权限,并且仍然只有 root
用户可以访问该设备,这可能是由于您的 Linux 系统中启用了 udev
规则导致的。
udev
是一个在 Linux 系统中用于管理设备的程序,它可以通过设备属性、设备名称等标识符来自动识别设备,并设置相应的权限等参数。如果您的系统中存在 udev
规则,则可能会覆盖手动设置的权限。
您可以尝试在 /etc/udev/rules.d/
目录中创建一个新的规则文件来授予普通用户对 /dev/ttyACM0
设备的访问权限。例如,可以创建一个名为 50-usb-serial.rules
的规则文件,并添加以下内容:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", MODE="0666", GROUP="dialout"
请将 idVendor
和 idProduct
的值替换为您的 USB 转串口适配器的厂商和产品 ID。MODE="0666"
表示授予所有用户读写权限,GROUP="dialout"
表示将设备授予 dialout
组的访问权限。
添加完毕后,保存并退出规则文件,然后重新加载 udev
规则:
sudo udevadm control --reload-rules
之后,您应该可以通过普通用户访问 /dev/ttyACM0
设备。
我的设备:
SUBSYSTEM=="tty", ATTRS{idVendor}=="1A86", ATTRS{idProduct}=="55D3", MODE="0666", GROUP="dialout"