Zephyr
是由Linux
基金会托管的开源协作项目,目标是构建一个针对资源受限设备的小型、可裁剪的实时操作系统(RTOS
)。Zephyr
项目非常适合构建简单的传感器网络、可穿戴设备以及小型物联网无线网关。系统采用模块化设计,支持多种CPU
架构,开发人员可以很容易的根据需求定制一个最优的解决方案。
Zephyr
相比其他开源物联网系统具有以下优点:
Apache 2.0
开源许可;Kconfig
裁剪功能选项,从而实现用户自定义的最佳配置;BLE
)、wifi
、802.15.4
以及其他标准,包括6lowpan
、coap
、ipv4
和ipv6
;下面介绍如何在Ubuntu 1604 Desktop环境下构建Zephyr开发环境。构建Zephyr开发环境需要在Ubuntu中正确安装Pyhton3和CMake等工具,除此之外还需要正确获取Zephyr源代码和Zephyr SDK。
sudo apt-get update
sudo apt-get upgrade
# 安装依赖项
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
把zephyr代码克隆到用户目录中,例如克隆至repo/zephyr
文件夹中。
mkdir -p repo
cd repo
git clone https://github.com/zephyrproject-rtos/zephyr
# 进入zephyr文件夹
cd zephyr
# 通过pip3工具安装其他依赖项
pip3 install --user -r scripts/requirements.txt
zephyr
的开发需要 cmake 3.8.2
或以上版本,通过 ubuntu
软件仓库安装的 cmake
版本较低并不符合要求,可通过以下步骤把合适的CMake安装到$HOME/cmake
。
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
把CMake安装目录增加到用户环境变量中,修改用户目录中的.bashrc
文件的最后增加一行
export PATH=/bin:$PATH
新建一个控制台,在控制台中输入cmake --version
验证cmake工具是否安装成功,此处CMake的版本编号为3.8.2
。
cmake --version
cmake version 3.8.2
zephyr SDK
会自动安装被支持硬平台所依赖的编译、下载、调试等工具。本文中使用的SDK版本为 0.9.2
。安装过程中控制台将出现Zephyr SDK安装路径的提示,建议把zephyr SDK安装到用户目录\opt\zephyr-sdk
文件夹中。
# 下载SDK
wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.2/zephyr-sdk-0.9.2-setup.run
# 安装SDK
chmod +x zephyr-sdk-0.9.2-setup.run
./zephyr-sdk-0.9.2-setup.run
在用户目录.bashrc
文件末尾再增加ZEPHYR_GCC_VARIANT
、ZEPHYR_SDK_INSTALL_DIR
和ZEPHYR_BASE
等参数,修改完成之后在控制台执行source .bashrc
,该指令可使新增加的环境变量立即生效。
cat ~/.bashrc
export PATH=/bin:$PATH
export ZEPHYR_GCC_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=
export ZEPHYR_BASE=
完成上述安装过程后,可以通过 hello world
示例验证 zephyr
开发环境是否一切正常。此处使用qemu_x86
仿真平台进行验证。此处编译生成的hello world
可执行文件将运行于QEMU仿真平台。
$ZEPHYR_BASE/samples/hello_world
文件夹中包含以下几个重要文件,虽然其他的示例的功能与这个hello world
示例存在差别,但是各示例目录的文件结构却高度相似。
- CMakeLists.txt
构建文件,用于生成makefile;
- src/main.c
主函数文件;
- prj.conf
配置文件
通过CMake生成Makefile文件时,需要通过BOARD
参数指定目标平台,此处指定为qemu_x86
平台。
cd $ZEPHYR_BASE/samples/hello_world
# 新建一个build目录,用于存放临时文件
mkdir -p build && cd build
# 通过cmake指令生成qemu_x86平台makefile文件
cmake -DBOARD=qemu_x86 ..
# 编译
make
# 执行
make run
To exit from QEMU enter: 'CTRL+a, x'
[QEMU] CPU: qemu32,+nx,+pae
qemu-system-i386: warning: Unknown firmware file in legacy mode: genroms/multiboot.bin
***** BOOTING ZEPHYR OS v1.10.99 - BUILD: Jan 20 2018 09:40:00 *****
Hello World! x86
zephyr支持多种ARM平台和Arduino平台,其中也包括数个nucleo stm32平台,下面以nucleo stm32f429zi
为例说明如何在STM32平台执行blinky
示例。
为了把blinky固件下载至目标板中,需要在Ubuntu中正确安装stlink工具,安装步骤如下:
# 安装依赖库
sudo apt-get install libusb-1.0
# 克隆stlink工具
git clone https://github.com/texane/stlink
# 编译
make release
make debug
cd build
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
# 安装
cd Release
sudo make install
重新拔插STM32F4开发板USB端口后,固件便可正确下载至STM32目标版。
# 进入 blinky 示例
cd $ZEPHYR_BASE/samples/basics/blinky
# 新建build文件夹
mkdir -p build && cd build
# 指定目标平台
cmake -DBOARD=nucleo_f429zi ..
# 编译
make
# 下载固件
make flash
相较于QEMU平台的hello world
示例,该示例通过make flash
命令把固件下载至STM32F4目标板中。
ipv6
,coap
和lwm2m
,这些协议将在未来物联网应用被中被广泛使用。