问题:
执行 make flash
时报错:
Toolchain path: /home/pjw/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf/bin/xtensa-esp32-elf-gcc
Toolchain version: esp-2020r3
Compiler version: 8.4.0
Python requirements from /home/pjw/ESP32/esp-idf/requirements.txt are satisfied.
Project is not inside a git repository, will not use 'git describe' to determine PROJECT_VER.
App "hello-world" version: 1
Flashing binaries to serial port /dev/ttyUSB0 (app at offset 0x10000)...
esptool.py v2.8
Serial port /dev/ttyUSB0
Traceback (most recent call last):
File "/home/pjw/.local/lib/python3.8/site-packages/serial/serialposix.py", line 322, in open
self.fd = os.open(self.portstr, os.O_RDWR | os.O_NOCTTY | os.O_NONBLOCK)
PermissionError: [Errno 13] Permission denied: '/dev/ttyUSB0'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/pjw/ESP32/esp-idf/components/esptool_py/esptool/esptool.py", line 3201, in <module>
_main()
File "/home/pjw/ESP32/esp-idf/components/esptool_py/esptool/esptool.py", line 3194, in _main
main()
File "/home/pjw/ESP32/esp-idf/components/esptool_py/esptool/esptool.py", line 2889, in main
esp = chip_class(each_port, initial_baud, args.trace)
File "/home/pjw/ESP32/esp-idf/components/esptool_py/esptool/esptool.py", line 237, in __init__
self._port = serial.serial_for_url(port)
File "/home/pjw/.local/lib/python3.8/site-packages/serial/__init__.py", line 90, in serial_for_url
instance.open()
File "/home/pjw/.local/lib/python3.8/site-packages/serial/serialposix.py", line 325, in open
raise SerialException(msg.errno, "could not open port {}: {}".format(self._port, msg))
serial.serialutil.SerialException: [Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0'
/home/pjw/ESP32/esp-idf/components/esptool_py/Makefile.projbuild:88: recipe for target 'flash' failed
make: *** [flash] Error 1
原因:
只有root用户和属于dialout组的用户会有读写权限
解决:
方法一:
该方法重启就会失效
sudo chmod -R 777 /dev/ttyUSB0
方法二:
永久性方案:
把自己的用户加入到dialout组:
sudo usermod -aG dialout user //user替换为自己的用户名
reboot //必须要重启一下才会生效