Zephyr 之快速体验
文章目录
Intro
Zephyr 最初是由 Wind River 公司开发的一个微内核,在 2016 年的时候成为 Linux 基金会维护的一个项目,发展至今,已经成为了一个功能齐全的嵌入式 OS。平台现在支持 ARM、RISC-V、X86、Xtensa 等等处理器平台,拥有原生的 BLE 协议栈、完整的Net 协议栈,包括 TCP/IP 与应用层协议,为嵌入式应用的开发提供了有力的支持。
Zephyr 支持在 Linux,Windows 和 MacOS 上进行开发,在看 Zephyr 的 Getting Started Guide 时了解到,在 Windows 上开发实际上使用到了 WSL 服务,本质上还是属于在 Linux 上开发,为了体验到更全面的开发环境,因此本文选择直接在 Linux 上开发,下载 VirtualBox 虚拟机软件,安装 Ubuntu22.04 操作系统,在虚拟机上进行开发。为什么不选择在 MacOS 上开发,原因是我手上的电脑是 Windows 平台,为方便使用,不选择 MacOS。
Getting Started Guide Ubuntu OS (Ubuntu 22.04 LTS)
原文:https://docs.zephyrproject.org/latest/develop/getting_started/index.html
安装依赖项
更新软件包列表,检查可用的软件包更新:
sudo apt update
安装可用的软件包更新:
sudo apt upgrade
如果 Ubuntu Version < 22.04,则需要执行以下内容:
wget https://apt.kitware.com/kitware-archive.sh
sudo bash kitware-archive.sh
安装 CMake,Python 和 Devicetree compiler:
sudo apt install --no-install-recommends git cmake ninja-build gperf \
ccache dfu-util device-tree-compiler wget \
python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \
make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
检查 CMake,Python 和 Devicetree compiler 的版本:
cmake --version
python3 --version
dtc --version
其版本要求如下:
Tool | Min.Version | Now.Version |
---|---|---|
CMake | 3.20.5 | 3.27.2 |
Python | 3.8 | 3.10.12 |
Devicetree compiler | 1.4.6 | 1.6.1 |
获取 Zephyr 和安装 Python 依赖项
安装 Python 虚拟环境管理工具 venv:
sudo apt install python3-venv
创建 Zephyr 的虚拟环境,执行完以下操作后,可以在主目录下看到一个名为 “zephyrproject” 的文件夹:
python3 -m venv ~/zephyrproject/.venv
激活 Zephyr 的虚拟环境:
source ~/zephyrproject/.venv/bin/activate
需要注意,从这里开始,后面的操作都将处于在 Zephyr 的虚拟环境中进行操作
安装 Zephyr 的瑞士军刀 west:
pip install west
当然,也可以选择不使用虚拟环境,省略安装 venv,直接装 west:
pip3 install --user -U west echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc source ~/.bashrc
使用 west 工具获取 zephyr 的工程,执行完以下操作后,终端位置将处于 “~/zephyrproject” 下:
west init ~/zephyrproject
cd ~/zephyrproject
west update
west init
指令会使用 Git 的方式从 https://github.com/zephyrproject-rtos/zephyr 上 clone 代码,如果想 clone 其他仓库的 Zephyr 代码,则可以在指令后面加上 -m <URL>
来指定 Git 仓库,再加上 --mr
指令可以来指定所需要的版本。
west update
指令是读取 zephyr/west.yml 文件,通过 Git 来 clone 所需要的非 zephyr 代码。
导出 Zephyr CMake 软件包,这回让 CMake 允许自动加载构建 Zephyr 应用程序所需的样板代码:
west zephyr-export
Zephyr 的 scripts/requirements.txt 中声明了额外的 Python 依赖项,使用 pip 来安装它们,这一步将会下载较多的文件,建议用户想办法在一个 “稳定” 环境下执行下面的操作:
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
安装 Zephyr SDK
Zephyr SDK 包含了 Zephyr 支持的每个架构的工具链,包括编译器,汇编程序,连接器和构建 Zephyr APP 所需的其它程序。
它还包含其它主机工具,如用于枚举了,擦写 Flash 和调试 Zephyr 应用程序的 custom QEMU (纯软件实现的虚拟化模拟器) 和 OpenOCD (开源片上调试器) 工具。
下载和验证 Zephyr SDK bundle,这将会下载一个超过 1GB 大小的压缩包,建议在一个 “稳定” 的网络环境中执行下面的指令,在普通网络环境下,实测下载所需时间为一个多小时:
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing
下载完成后,能够在主目录下看到一个名为 “zephyr-sdk-0.16.1_linux-x86_64.tar.xz” 的文件,,在主目录下解压这个文件:
tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz
在 Zephyr 的 Getting Started Guide 中这样写道:
It is recommended to extract the Zephyr SDK bundle at one of the following locations:
$HOME
$HOME/.local
$HOME/.local/opt
$HOME/bin
/opt
/usr/local
The Zephyr SDK bundle archive contains the
zephyr-sdk-0.16.1
directory and, when extracted under$HOME
, the resulting installation path will be$HOME/zephyr-sdk-0.16.1
.
所以一定要在主目录中解压这个文件。
运行 Zephyr SDK bundle Setup 脚本,执行完以下操作后,终端位置将处于 “~/zephyr-sdk-0.16.1” 下:
cd zephyr-sdk-0.16.1
./setup.sh
安装 udev rules,这样能够以常规用户的方式擦写芯片的 Flash:
sudo cp ~/zephyr-sdk-0.16.1/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload
到这里,Zephyr 的初始化操作就完成了。
编译 Zephyr 的 Samples
在移植新的微控制器和开发板之前,我想先看看 Zephyr 的效果,手上没有适配好的开发板,别急,使用 QEMU 环境可以在电脑上直接运行,跑一个 hello_world 试试:
cd ~/zephyrproject/zephyr
west build -p always -b qemu_x86 samples/hello_world
执行下列语句也能看到内容:
west build -t run
可以看到内容:
[0/1] To exit from QEMU enter: 'CTRL+a, x'[QEMU] CPU: qemu32,+nx,+pae
SeaBIOS (version zephyr-v1.0.0-0-g31d4e0e-dirty-20200714_234759-fv-az50-zephyr)
Booting from ROM..
*** Booting Zephyr OS build zephyr-v3.4.0-2497-g431a778b8c76 ***
Hello World! qemu_x86
如果有开发板的话,可以执行下列语句编译程序:
cd ~/zephyrproject/zephyr
west build -p always -b <BOARD_NAME> samples/hello_world
下载程序:
west flash
然后打开minicom,连接开发板看下效果,串口的波特率115200,数据位8bit,无校验位,停止位1bit,无流量控制:
*** Booting Zephyr OS build zephyr-v3.4.0-2454-g6a20f4b013b2 ***
Hello World! <BOARD_NAME>
Summary
Zephyr 除了提供 OS 该有的东西外,还提供了编译和调试环境,本文按照 Zephyr 提供的 Getting Started Guide,在 Ubuntu 22.04 LTS 上走了一遍初始化流,并且成功的编译了一个 hello_world 并且顺利跑在 QEMU 和实际的一块开发板上。