1. 创建最小Zephyr应用
任务目标
本案例完成Zephyr RTOS的最小可运行闭环:搭建基于模拟器(qemu_x86)的开发环境,创建最小应用工程,编译并启动内核,通过串口输出验证系统正常运行。最终目标是掌握Zephyr应用的标准目录结构、构建系统调用方式与模拟器验证方法。
环境准备
需要Linux环境(推荐Ubuntu 22.04+),安装以下依赖:
# 基础依赖
sudo apt update
sudo apt install -y git cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-pip python3-setuptools python3-tk python3-wheel xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev
# Zephyr构建工具(west)
pip3 install west
# 安装Zephyr SDK(含qemu_x86模拟器支持)
cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.5/zephyr-sdk-0.16.5_linux-x86_64.tar.xz
tar xf zephyr-sdk-0.16.5_linux-x86_64.tar.xz
cd zephyr-sdk-0.16.5
./setup.sh -t all -c
获取Zephyr源码并初始化环境
mkdir ~/zephyr-project && cd ~/zephyr-project
west init zephyr
cd zephyr
west update
west zephyr-export
pip3 install -r zephyr/scripts/requirements.txt
创建最小应用
应用目录结构如下,包含CMakeLists.txt、prj.conf和src/main.c三个必要文件:
mkdir -p ~/zephyr-project/myapp/src
cd ~/zephyr-project/myapp
CMakeLists.txt(应用构建入口):
cmake_minimum_required(VERSION 3.20.0)
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(myapp)
target_sources(app PRIVATE src/main.c)
prj.conf(内核配置,此处为空即可):
# 最小应用无需额外配置
src/main.c(应用主程序):
#include <zephyr/kernel.h>
#include <zephyr/sys/printk.h>
int main(void)
{
printk("Hello Zephyr! Board: %s\n", CONFIG_BOARD);
return 0;
}
编译与运行
# 设置环境变量(每次新终端需执行)
export ZEPHYR_BASE=~/zephyr-project/zephyr
export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=~/zephyr-sdk-0.16.5
# 编译(目标板为qemu_x86模拟器)
cd ~/zephyr-project/myapp
west build -b qemu_x86
# 在模拟器中运行
west build -t run
验证方法
运行west build -t run后,QEMU模拟器窗口会启动,终端输出应包含以下内容:
*** Booting Zephyr OS build v3.5.0 ***
Hello Zephyr! Board: qemu_x86
看到Hello Zephyr!输出即表示最小应用构建成功并在模拟器上正常运行。按Ctrl+A后按X退出QEMU。
常见问题
- west命令找不到:确认
pip3 install west成功,且~/.local/bin已加入PATH。 - 编译报错找不到Zephyr:检查
ZEPHYR_BASE环境变量是否指向正确的zephyr源码路径。 - QEMU无法启动:确认SDK安装时选择了
-t all参数,且系统已安装libsdl2-dev。