Zephyr下ESP32S3开发环境搭建(Linux篇)
1.环境准备
建议用使用Ubuntu22.04 LTE,因为LTE版本是被维护的阶段,运行update时,更新会比较顺利。
这里不详述Ubuntu22.04 LTE的搭建,搭建好以后,更新下:
sudo apt update
sudo apt upgrade
2.搭建流程
参考链接1:Getting Started Guide — Zephyr Project Documentation
参考链接2:Zephyr 下 esp32s3 开发环境搭建 - 知乎
2.1 版本要求说明
确保cmake / python3 / dtc的版本不低于如下要求:
cmake的版本使用默认的apt install cmake安装也可以满足要求,若是想升级高版本,可以使用下面的命令:
wget https://apt.kitware.com/kitware-archive.sh
sudo bash kitware-archive.sh
2.2 安装依赖
需要安装以下依赖:
sudo apt install --no-install-recommends git cmake ninja-build gperf \ccache dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
安装完成后,验证对应版本如下:
3.拉zephyr
3.1 Python虚拟环境
(1)创建虚拟环境
python3 -m venv ~/zephyrproject/.venv
(2)激活虚拟环境
source ~/zephyrproject/.venv/bin/activate
3.2 获取Zephyr
(1)安装west
pip install west
(2)获取Zephyr源码
完成初始化,后面的所有过程,请注意路径要对应,不要自己创建文件夹放置。
west init ~/zephyrproject
cd ~/zephyrproject
此时程序会开始下载,若是下载失败,可以使用下面方式:
在~/zephyrproject下会有一个.venv目录。你可以进行上面路径下修改对应的下载链接,当然如果你的环境下载github很快,大可不必进行修改,可以跳过这个步骤:
west update
(3)Cmake自动构建
导出 Zephyr CMake 包。这使得 CMake 能够自动加载构建 Zephyr 应用程序所需的应用代码。
west zephyr-export
(4)安装 Python 依赖项
Zephyr 的 west 扩展命令 “west packages” 可用于安装 Python 依赖项。
west packages pip --install
4.安装zephyr SDK
Zephyr 软件开发工具包(SDK)包含适用于 Zephyr 各支持架构的工具链,其中包括构建 Zephyr 应用程序所需的编译器、汇编器、链接器及其他程序。
在 Linux 系统上,该工具包还包含额外的主机工具,例如定制的 QEMU 和 OpenOCD 构建版本,这些工具用于 Zephyr 应用程序的仿真、烧录和调试。
(1)安装Zephyr SDK
cd ~/zephyrproject/zephyr
west sdk install
此处west sdk install执行后,若是无法下载成功,可以参考下面步骤,若是环境可以下载成功,下面步骤可以忽略。
通过浏览器在官网或者下面链接下载sdk包。下载后,将压缩包解压到~目录下,如果放在其他目录,执行west sdk install依然会提示失败。
官网下载链接:https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.2/zephyr-sdk-0.17.2_linux-x86_64_minimal.tar.xz
skylab创建链接:https://gitee.com/cocos_yang/zephyr-sdk-0.17.2
cd ~/zephyr-sdk-0.17.2
./setup.sh
./zephyr-sdk-x86_64-hosttools-standalone-0.10.sh
5.编译
(1)通过指令查看当前SDK支持的开发板名称如下:
west boards
(2)问题与解决
此处我选择esp32s3_devkitm,根据此board,我选择一个支持esp32s3_devkitm的示例,如下:
问题1:直接使用esp32s3_devkitm会提示如下信息:
解决方法,根据提示-b使用提示中的两个有效目标即可。
esp32s3_devkitm/esp32s3/procpu
esp32s3_devkitm/esp32s3/appcpu
(3)编译到指定文件夹
以上支持的board目标都是procpu,若是使用appcpu也会遇到各种问题,此处不再列举,选择一个支持procpu的示例samples/basic/blinky_pwm进行编译,如下:
west build -p always -b esp32s3_devkitm/esp32s3/procpu samples/basic/blinky_pwm -d build_2
编译完成后生成的目标zephyr.elf路径如上图所示。
(4)编译boot
使用--sysbuild可以编译出boot和image,指令如下
west build -p always -b esp32s3_devkitm/esp32s3/procpu --sysbuild samples/basic/blinky_pwm -d build_5
结果如下图所示:
6.烧录
(1)驱动和权限
直接使用west flash -d build_2命令,提示如下一系列问题:
问题1:ESP32接入系统提示问题如下:
[18342.944491] usb 2-2.2: usbfs: USBDEVFS_CONTROL failed cmd brltty rqt 128 rq 6 len 255 ret -71
[18343.034783] usb 2-2.2: USB disconnect, device number 5
[18347.259867] usb 2-2.2: new full-speed USB device number 6 using uhci_hcd
[18347.458580] usb 2-2.2: New USB device found, idVendor=1a86, idProduct=7523, bcdDevice= 2.64
[18347.458591] usb 2-2.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[18347.458593] usb 2-2.2: Product: USB Serial
[18347.460910] ch341 2-2.2:1.0: ch341-uart converter detected
[18347.469726] usb 2-2.2: ch341-uart converter now attached to ttyUSB0
[18348.148295] input: BRLTTY 6.4 Linux Screen Driver Keyboard as /devices/virtual/input/input10
[18348.171749] usb 2-2.2: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
[18348.183083] ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0
[18348.183124] ch341 2-2.2:1.0: device disconnected
解决:
sudo systemctl stop brltty
sudo systemctl disable brltty
sudo apt remove brltty
问题2:没有访问权限
(.venv) skylab@skylab-virtual-machine:~/zephyrproject/zephyr$ west flash -d build_2
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner esp32
-- runners.esp32: reset after flashing requested
-- runners.esp32: Flashing esp32 chip on None (921600bps)
esptool v5.0.2
Found 33 serial ports...
Serial port /dev/ttyUSB0:
/dev/ttyUSB0 failed to connect: Could not open /dev/ttyUSB0, the port is busy or doesn't exist.
([Errno 13] could not open port /dev/ttyUSB0: [Errno 13] Permission denied: '/dev/ttyUSB0')
Hint: Try to add user into dialout or uucp group.
解决方法:
添加权限:
sudo usermod -aG dialout skylab
wget https://github.com/espressif/openocd-esp32/releases/download/v0.12.0-esp32-20230921/openocd-esp32-linux-amd64-0.12.0-esp32-20230921.tar.gz
tar -xvf ./openocd-esp32-linux-amd64-0.12.0-esp32-20230921.tar.gz
cp ~/openocd-esp32/bin/openocd ~/zephyr-sdk-0.17.2/sysroots/x86_64-pokysdk-linux/usr/bin/
cp -r ~/openocd-esp32/share/openocd/* ~/zephyr-sdk-0.17.2/sysroots/x86_64-pokysdk-linux/usr/share/openocd/
SUBSYSTEMS=="usb", ATTRS{idVendor}=="303a", ATTRS{idProduct}=="10??", GROUP="plugdev", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1a86", ATTRS{idProduct}=="55??", GROUP="plugdev", MODE="0666"
sudo udevadm control --reload
(2)烧写
west flash -d build_2
7.运行
将ESP32S3的串口使用串口工具打开,可以看到相关输出
与对应工程定义输出对应: