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',使用插件开发(含代码补全功能)。

posted @ 2025-04-23 20:41  this毛豆  阅读(1021)  评论(0)    收藏  举报