Zephyr 环境搭建 - ESP32 篇

Zephyr 环境搭建 - ESP32 篇

本篇环境搭建的前提是 Zephyr 的基本环境已经搭建好,下述为与 ESP32 相关的环境搭建,最终的结果为使用 west 成功编译 hello_world 例程并下载到 ESP32 开发板上。Zephyr 基本环境搭建参考 Zephyr 环境搭建。

前置条件

  • Ubuntu 20.04 (virtualbox on win10)
  • Zephyr (v2.4-branch)
  • ESP32-DevKitC V4 (WROVER-E)

环境搭建

获取 ESP-IDF

mkdir ~/esp
cd ~/esp
git clone -b v4.2 --recursive https://github.com/espressif/esp-idf.git

安装 xtensa-esp32-elf 工具链

由于 Zephyr SDK 并不支持 ESP32,因此我们需要安装第三方 ESP32 工具链 xtensa-esp32-elf,可以手动下载该工具,这里我选择使用 ESP-IDF 提供的脚本来自动下载工具链。

cd ~/esp/esp-idf
./install.sh

注意此时需要有 python 环境,即

jackis@jackis-zephyr:~/zephyrproject/zephyr$ python --version
Python 3.8.5

若没有则需要手动安装 python 3.8,并更新 python 执行 python 3.8, 如下所示

ln -s /usr/bin/python3.8 /usr/bin/python

此时默认安装的工具链在 $HOME/.espressif 目录下,建议不要修改工具链的安装路径。

jackis@jackis-zephyr:~$ ls .espressif/
dist  python_env  tools

ESP-IDF 还提供了配置环境变量的脚本文件 export.sh,其执行命令为:

. $HOME/esp/esp-idf/export.sh

注意 .$HOME 之间有空格,该命令在后面会用到。

切换 Zephyr 为 v2.4-branch 版本

Zephyr master 分支编译 ESP32 会报错 ESP_IDF_PATH not found 的错误,切换为分支 v2.4-branch 即可,该分支为最新的发布版本。命令如下:

cd ~/zephyrproject/zephyr
git checkout v2.4-branch

配置 Zephyr 的构建环境变量

此处一共需要配置三个环境变量:

  • ZEPHYR_TOOLCHAIN_VARIANT:用于构建 Zephyr 当前工具链的名称。
  • ESPRESSIF_TOOLCHAIN_PATH:espressif 工具链的路径。
  • ESP_IDF_PATH:git clone [esp-idf](###获取 ESP-IDF) 的路径。

在配置环境变量前需运行 ESP-IDF 的脚本文件 export.sh,完整命令如下:

. ~/esp/esp-idf/export.sh
export ZEPHYR_TOOLCHAIN_VARIANT=espressif
export ESPRESSIF_TOOLCHAIN_PATH=${HOME}/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0/xtensa-esp32-elf
export ESP_IDF_PATH=${IDF_PATH}

此处需要注意 ESPRESSIF_TOOLCHAIN_PATH 环境变量里的工具链路径一定要是系统里安装的工具链真实路径,该工具链版本不一致时该路径也会不一致。

编译下载

此处编译例程 hello_world,请确保 zephyr 目录下没有 build 子目录,否则会报错。

cd ~/zephyrproject/zephyr
west build -b esp32 samples/hello_world
west flash

将物理机的 USB 转串口接入虚拟机。

由于 ESP32 下载程序通常使用串口下载,因此 west flash 需要能访问 ubuntu 的串口,普通用户不能直接操作串口,需要将当前用户添加到串口设备所属的组中。

首先查看 /dev/ttyUSB0 的权限

jackis@jackis-VirtualBox:~/zephyrproject/zephyr$ ls -l /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 0 Jan 26 16:52 /dev/ttyUSB0
  • 所有者:root,可读可写
  • 所属组:dialout,可读可写
  • 其他用户:无权限

修改 udev 规则,让普通用户也能使用串口

sudo vi /etc/udev/rules.d/70-ttyusb.rules

添加下述内容,

KERNEL=="ttyUSB[0-9]*",MODE="0666"

然后重新插入 USB 转串口即可。

按住 ESP32 的 boot 按钮,输入 west flash 下载程序,松开 boot 按钮即可开始下载程序。

minicom -D /dev/ttyUSB0 打开串口观察到数据。

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3ffb0000,len:116
load:0x3ffb0074,len:140
load:0x3ffb0100,len:704
load:0x40080000,len:1024
load:0x40080400,len:72
load:0x40080448,len:256
load:0x40080548,len:13132
entry 0x400807b0
*** Booting Zephyr OS build zephyr-v2.4.0-8-g9c30e7946974  ***
Hello World! esp32

参考:

Zephyr Supported Boards - ESP32

ESP32 Toolchain - xtensa-esp32-elf

Zephyr Issues - Setting esp-idf path to match Espressif's documentation

ubuntu安装python3.7,并更新python默认指向为python3.7

你可能感兴趣的:(Zephyr 环境搭建 - ESP32 篇)