1. 创建第一个Zephyr应用
任务目标
在本案例中,你将完成Zephyr RTOS的首次实战:搭建基于nRF52840 DK开发板的Zephyr开发环境,创建一个最小应用工程,编译并烧录到开发板,最终通过串口终端验证输出Hello World。整个过程覆盖从零到串口打印的完整闭环。
环境准备
本案例需要以下环境与依赖,请提前安装配置:
- 主机系统:Ubuntu 22.04 LTS(64位)或Windows 10/11 + WSL2
- Zephyr SDK:0.16.8(包含arm-none-eabi-gcc编译器、QEMU等工具)
- west:Zephyr的元工具,用于多仓库管理与构建
- Python:3.8+,需安装
pyelftools等依赖 - nRF52840 DK开发板:用于烧录与串口输出验证
安装Zephyr SDK并设置环境变量:
# 下载并解压SDK(以0.16.8为例)
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.8/zephyr-sdk-0.16.8_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.8_linux-x86_64.tar.xz -C ~/
cd ~/zephyr-sdk-0.16.8
./setup.sh -t all
# 设置环境变量(建议写入~/.bashrc)
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.16.8
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_BASE=~/zephyrproject/zephyr
创建并初始化Zephyr工作区
# 创建工作区目录
mkdir ~/zephyrproject && cd ~/zephyrproject
# 初始化west工作区(拉取Zephyr主仓库)
west init -m https://github.com/zephyrproject-rtos/zephyr --mr v3.7.0
# 拉取Zephyr及依赖模块(如hal_nordic等)
west update
# 导出Zephyr CMake包(供west build使用)
west zephyr-export
# 安装Python依赖
pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt
创建最小应用工程
在~/zephyrproject下创建你的第一个应用目录hello_world,包含两个文件:
mkdir -p ~/zephyrproject/hello_world/src
cd ~/zephyrproject/hello_world
src/main.c——应用入口,通过内核启动后调用串口打印:
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/drivers/uart.h>
/* 获取UART0设备(开发板默认串口) */
const struct device *const uart_dev = DEVICE_DT_GET(DT_NODELABEL(uart0));
int main(void)
{
if (!device_is_ready(uart_dev)) {
return -1;
}
const char msg[] = "Hello World\r\n";
for (int i = 0; i < sizeof(msg) - 1; i++) {
uart_poll_out(uart_dev, msg[i]);
}
while (1) {
k_sleep(K_FOREVER);
}
return 0;
}
CMakeLists.txt——构建脚本,声明应用名与源码:
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(hello_world)
target_sources(app PRIVATE src/main.c)
prj.conf——内核配置(本案例无需额外配置,文件可留空或仅加注释):
# 最小应用,无需额外配置
编译与烧录
# 进入应用目录
cd ~/zephyrproject/hello_world
# 编译(指定开发板为nRF52840 DK)
west build -b nrf52840dk/nrf52840
# 烧录到开发板(通过板载J-Link)
west flash
若编译过程中提示缺少hal_nordic模块,请确认已执行west update拉取全部依赖。
验证方法
烧录完成后,通过串口工具(如screen或minicom)连接开发板的USB虚拟串口,波特率115200,8N1格式。复位开发板后,串口终端应输出:
Hello World
通过条件:串口终端完整打印Hello World且无乱码,程序持续运行不崩溃(开发板LED无异常闪烁)。若输出乱码,请检查串口波特率是否匹配;若无输出,请确认west flash烧录成功且开发板处于DFU模式(nRF52840 DK需按下复位键进入烧录模式)。
常见问题排查
- 编译报错“No board named 'nrf52840dk/nrf52840'”:执行
west update后重新编译,确认Zephyr版本为v3.7.0及以上。 - 烧录失败“No J-Link found”:检查开发板USB连接,安装J-Link驱动,或改用
nrfjprog --program build/zephyr/zephyr.hex --chiperase手动烧录。 - 串口无输出:确认
prj.conf中未禁用UART,且开发板串口选择开关(SW5)拨至USB位置。