Zephyr RTOS快速入门
Zephyr 一开始由风河公司(Wind River被Intel收购后的杰作)开发的微内核,后由Linux基金会托管,Apache-2.0开源协议,商用免费。
模块化架构,标准化驱动接口,通过设备树描述硬件,Tickless内核,动态电源管理,动态频率调整,多种安全性设计,内置多种协议栈,如蓝牙/BLE、WiFi、LoRaWAN、MQTT、CoAP、Thread、Zigbee等。
Zephyr支持Windows/Linux/MacOS开发,本文使用Ubuntu 22.04 for x64环境,其它平台请参考官方入门教程:
https://docs.zephyrproject.org/latest/develop/getting_started/index.html
本文编译树莓派Pico和Qemu仿真两种示例。
1. 安装环境
$ sudo apt install build-essential flex bc gawk texinfo libssl-dev libncurses-dev \ git cmake ninja-build gperf ssh ccache dfu-util device-tree-compiler wget \ python3-dev python3-pip python3-setuptools python3-tk python3-wheel python3-venv \ python-is-python3 xz-utils file libsdl2-dev libmagic1 unzip gnutls-bin
zephyr包含两部分: zephyr和zephyr-sdk,前者是RTOS源码,后者是相关工具。
2. 下载代码
LTS版本列表:
LTS版本 | 发布时间 | EOL时间 |
Zephyr 1.14.1 (LTS1) | 2019-07 | 2022-01 |
Zephyr 2.7.6 (LTS2) | 2024-03 | 2025-01 |
Zephyr 3.7.0 (LTS3) | 2024-07 | 2029-07 |
最终目录结构:
zephyrtos/ ├── tools │ └── zephyr-sdk └── zephyrproject ├── bootloader ├── modules ├── tools └── zephyr
'tools'目录存放的是sdk,其中包含编译工具链。'zephyrproject'是源码目录,名字可以随意取。
之所以把sdk单独加一级文件夹,主要是有多个版本的sdk对不同版本zephyr源码支持情况不同,如果当前版本无法编译源码,可以下载其它版本放在这里面。
创建并激活Python虚拟环境:
$ mkdir -p ~/zephyrtos $ mkdir -p ~/zephyrtos/zephyrproject $ python3 -m venv ~/zephyrtos/zephyrproject/.venv $ source ~/zephyrproject/.venv/bin/activate
此时,已经进入激活的python虚拟环境,在虚拟环境中安装必要的python库:
$ pip install west patool requests semver tqdm pyelftools intelhex esptool
下载Zephyr源码:
$ west init ~/zephyrtos/zephyrproject $ cd ~/zephyrtos/zephyrproject $ west update
(可选)为节约存储空间,可以选择使用浅克隆:
$ west init --mr main --depth 1 ~/zephyrtos/zephyrproject $ cd ~/zephyrtos/zephyrproject $ west update --depth 1
(可选)上述命令会下载最新的代码,而不是指定版本的代码,加入下载LTS3的Zephyr 3.7.x系列,则改成:
$ west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.7.1 ~/zephyrtos/zephyrproject $ cd ~/zephyrproject $ west update
另外,还可以注释掉我们不关心的模块,当github产生变化,且我们更新时,就不会更新注释掉的模块:
$ cd ~/zephyrtos/zephyrproject/zephyr
$ vim west.yml
在west.yml中注释掉不关心的内容即可。
导出Zephyr CMake 包。这允许 CMake 自动加载构建 Zephyr 应用程序所需的样板代码:
$ west zephyr-export
3. 下载SDK
sdk支持情况:
SDK / Zephyr | main | collab-sdk-0.18-dev | 4.0.0 | 3.7.0 | 3.6.0 | 3.5.0 | 3.4.0 | 3.3.0 | 3.2.0 | 3.1.0 | 3.0.0 | 2.7.3 | 2.7.2 | 2.7.1 | 2.7.0 |
0.18.0-alpha1 | N | Y | N | N | N | N | N | N | N | N | N | N | N | N | N |
0.17.0 | Y | N | Y | N | N | N | N | N | N | N | N | N | N | N | N |
0.16.9 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.8 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.5 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.4 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.3 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.2 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.1 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.16.0 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.15.2 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.15.1 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.15.0 | Y | N | Y | Y | Y | Y | Y | Y | Y | N | N | N | N | N | N |
0.14.2 | N | N | N | N | N | N | N | N | N | Y | Y | N | N | N | N |
0.14.1 | N | N | N | N | N | N | N | N | N | Y | Y | N | N | N | N |
0.14.0 | N | N | N | N | N | N | N | N | N | Y | Y | N | N | N | N |
0.13.2 | N | N | N | N | N | N | N | N | N | Y | Y | Y | Y | Y | Y |
这里提供两种安装方式,个人比较喜欢第2种方式。
3.1 安装方式1
$ west sdk install -d ~/zephyrtos/tools
这条命令会下载全部toolchain,你可以使用:
west sdk install --help
进行定制化修改。
3.2 安装方式2
以zephyr-sdk-0.17.0为例:
$ cd ~/zephyrtos/tools $ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.0/zephyr-sdk-0.17.0_linux-x86_64.tar.xz $ tar -xf zephyr-sdk-0.17.0_linux-x86_64.tar.xz $ cd zephyr-sdk-0.17.0/ $ ./setup.sh
安装过程中的选项都选y即可,即:
Install host tools [y/n]? y
Register Zephyr SDK CMake package [y/n]? y
setup.sh只需要首次运行,后续重启后,无需重新配置,激活虚拟环境后,可直接使用,即:
$ source ~/zephyrtos/zephyrproject/.venv/bin/activate
4. 测试代码
安装依赖(只安装了一小部分):
$ cd ~/zephyrproject $ pip install zephyr/scripts/requirements-base.txt
设置env:
$ zephyr-env.sh
编译代码:
$ cd ~/zephyrtos/zephyrproject/zephyr
$ west build -p always -b <your-board-name> samples/basic/blinky
其中 <your-board-name>,可以通过执行以下命令获取支持的board名称:
$ cd ~/zephyrtos/zephyrproject/zephyr
$ west boards
这里测试Raspberry Pi Pico为例:
$ cd ~/zephyrtos/zephyrproject/zephyr
$ west build -p always -b rpi_pico samples/basic/blinky
Note: 如果blinky无法使用,可以尝试其它sample,比如'samples/hello_world'。
产生的文件在:
~/zephyrtos/zephyrproject/zephyr/build/zephyr/zephyr.bin ~/zephyrtos/zephyrproject/zephyr/build/zephyr/zephyr.elf ~/zephyrtos/zephyrproject/zephyr/build/zephyr/zephyr.uf2
另外,还可以进行配置:
$ west build -t menuconfig
5. 刷机
rpi pico就是直接把'.uf2'复制rpi pico存储空间,即可正常运行。
如果是编译其它平台,如esp32,刷机可以这样做:
假设节点是,Linux平台: '/dev/ttyACM0',Windows平台: 'COM3'。
# Linux. $ west flash --esp-device /dev/ttyACM0 # Windows. # west flash --esp-device COM3
监控串口输出可以使用minicom, putty等串口调试工具。
6. Qemu
查看Zephyr支持哪些Qemu平台:
$ west boards | grep qemu qemu_arc qemu_cortex_a53 qemu_malta qemu_riscv32_xip qemu_cortex_r5 qemu_cortex_a9 qemu_cortex_m0 qemu_cortex_m3 qemu_x86 qemu_x86_lakemont qemu_x86_64 qemu_x86_tiny qemu_riscv32 qemu_nios2 qemu_xtensa qemu_leon3 qemu_riscv64 qemu_riscv32e qemu_kvm_arm64
以qemu_riscv64为例:
$ west build -b qemu_riscv64 samples/hello_world
运行:
$ west build -t run
'Ctrl + A, X'可以退出Qemu.
7. 其它
开发可以使用一些IDE,如VS Code,分两种方式,方式1: 直接开发,方式2: 安装VS Code插件'Zephyr IDE',使用插件开发(含代码补全功能)。