zephyr编译环境搭建

Creative Commons
本作品采用知识共享署名

本文记录了在Ubuntu 16.04 64bit下安装配置zephy编译环境并编译esp32的过程

Zephyr环境安装

下载代码到~/work/project/zephyr/

1
2
cd ~/work/project/
git clone https://github.com/zephyrproject-rtos/zephyr.git

设置环境

安装软件包

1
2
3
4
sudo apt-get install --no-install-recommends git cmake ninja-build gperf \
ccache doxygen dfu-util device-tree-compiler \
python3-ply python3-pip python3-setuptools xz-utils file make gcc-multilib \
autoconf automake libtool

安装Zephyr依赖包

1
2
cd ~/work/project/zephyr
pip3 install --user -r scripts/requirements.txt

如果安装的是python2需要使用下面命令

1
pip2 install --user -r scripts/py2-requirements.txt

用“cmake –version”确认cmake版本是3.8.2以上,如果不是安装3.8.2

1
2
3
4
mkdir $HOME/cmake && cd $HOME/cmake
wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh
yes | sh cmake-3.8.2-Linux-x86_64.sh | cat
echo "export PATH=$PWD/cmake-3.8.2-Linux-x86_64/bin:\$PATH" >> $HOME/.zephyrrc

安装Zephyr SDK

安装时将SDK安装在~/zephyr-sdk/,编辑~/.zephyrrc将加入环境变量

1
2
#export ZEPHYR_GCC_VARIANT=zephyr -->这个环境变量不能设置,会导致esp32编译时使用xtensa模拟器的toolchain,详见https://github.com/zephyrproject-rtos/zephyr/issues/6439
export ZEPHYR_SDK_INSTALL_DIR=/home/frank/zephyr-sdk

ESP32 环境安装

安装ESP32 toolchain

安装依赖包

1
sudo apt-get install git wget make libncurses-dev flex bison gperf python python-serial

下载&安装tool chain

通过https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz 下载toolchain,并安装在~/opt/esp/下

1
2
3
mkdir -p ~/opt/esp
cd ~/opt/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

安装ESP32 SDK

1
2
3
4
cd ~/opt/esp
git clone --recursive https://github.com/espressif/esp-idf.git
cd ~/opt/esp/esp-idf
git checkout dc8c33892e0 #esp SDK最新的版本可能会删除zephyr的依赖文件,因此checkout到指定版本

配置ESP32环境

建立文件~/opt/esp/zephyr-esp-setup.sh来配置ESP32用的环境变量

1
2
3
export ZEPHYR_TOOLCHAIN_VARIANT="espressif"
export ESP_IDF_PATH="/home/frank/opt/esp/esp-idf"
export ESPRESSIF_TOOLCHAIN_PATH="/home/frank/opt/esp/xtensa-esp32-elf/"

编译Zephyr for ESP32

设置环境变量

1
2
3
cd ~/work/project/zephyr
source ./zephyr-env.sh
source ~/opt/esp/zephyr-esp-setup.sh

编译hello world

1
2
3
4
cd samples/hello_world/
mkdir esp32_build
cmake -GNinja -DBOARD=esp32 ..
ninja

最后产出的文件在esp32_build/zephyr下

1
2
3
4
5
6
-rwxrwxr-x  1 frank frank   862741 3月  11 22:05 zephyr.bin
-rwxrwxr-x 1 frank frank 253960 3月 11 22:05 zephyr.elf
-rw-rw-r-- 1 frank frank 276611 3月 11 22:05 zephyr.lst
-rw-rw-r-- 1 frank frank 140256 3月 11 22:05 zephyr.map
-rwxrwxr-x 1 frank frank 20905792 3月 11 22:05 zephyr_prebuilt.elf
-rw-rw-r-- 1 frank frank 3527 3月 11 22:05 zephyr.stat

参考

http://docs.zephyrproject.org/getting_started/getting_started.html
http://docs.zephyrproject.org/boards/xtensa/esp32/doc/esp32.html
https://esp-idf.readthedocs.io/en/latest/get-started/linux-setup.html
https://esp-idf.readthedocs.io/en/latest/get-started/index.html#get-started-get-esp-idf