文章摘要
本文是 Zephyr RTOS 学习计划的第 2 课,详细介绍了如何创建、编译和运行第一个 Zephyr “Hello World” 应用程序。主要内容包括:
- 环境准备:激活 Zephyr 开发环境并创建工作空间
- 工程创建:建立完整的 Zephyr 应用目录结构(CMakeLists.txt、prj.conf、src/main.c)
- 编译流程:使用 west 工具链编译 STM32 (nucleo_f303re) 和 ESP32-S3 目标
- 烧录与调试:STM32CubeProgrammer 安装、USB 权限配置、串口监控
- west build 解析:理解 Zephyr 构建系统的完整工作流程
- 实践建议:针对 NUCLEO-F303RE 和 ESP32-S3 开发板的实践顺序
通过本课学习,读者将掌握 Zephyr 应用开发的基础流程,能够独立创建、编译、烧录和调试 Zephyr 应用程序。
很好,我们继续 Zephyr 学习计划。
已经完成了:
- ✅ 01-Install(环境安装) - ⏳ 02-HelloWorld(第一个 Zephyr 程序)这一课的目标是理解 Zephyr 工程结构,并成功在模拟器和开发板上运行 Hello World
第2课 HelloWorld
本课目标
完成以后,你应该能够:
- 理解 Zephyr Application 的目录结构 - 会使用 west 编译程序 - 会烧录到 STM32 和 ESP32 - 会查看串口输出 - 理解 west build 的工作流程Step1 创建 Workspace
首先激化环境
cd~/zephyrprojectsource.venv/bin/activate进入workspace
cd~/zephyrproject看看目录
ls应该类似
bootloader modules tools west.yml zephyr说明安装成功。
Step2 创建自己的工程
不要修改官方 sample。
建立自己的目录
mkdir-p~/workspace/hello_worldcd~/workspace/hello_world目录最终会变成
hello_world/
Step3 建立 CMakeLists.txt
创建
CMakeLists.txt内容:
cmake_minimum_required(VERSION3.20.0)find_package(Zephyr REQUIRED HINTS$ENV{ZEPHYR_BASE})project(hello_world)target_sources(app PRIVATE src/main.c)Step4 建立 prj.conf
创建
prj.conf先什么都不用写:
#以后这里会放CONFIG_GPIO=yCONFIG_UART_CONSOLE=y...Step5 建立 src
mkdirsrc建立
src/main.c内容
#include<zephyr/kernel.h>intmain(void){while(1){printk("Hello Zephyr!\n");k_sleep(K_SECONDS(1));}return0;}整个目录:
hello_world/ ├── CMakeLists.txt ├── prj.conf └── src └── main.cStep6 查看开发板名称
查看所有 board
west boardsSTM32 F303RE
应该看到
nucleo_f303reESP32S3
一般是
esp32s3_devkitc不同 ESP32S3 板子名称可能不同。
可以搜索
west boards|grepesp32Step7 编译 STM32
在build之前,
(.venv) cxicc@zephyr:~/zephyrproject$ source ~/zephyrproject/zephyr/zephyr-env.sh
(.venv) cxicc@zephyr:~/zephyrproject$ echo $ZEPHYR_BASE
/home/cxicc/zephyrproject/zephyr
否者ZEPHYR_BASE为空, 你会找不到bitbake的扩展(Extensions)
cd~/workspace/hello-world west build-bnucleo_f303re.留心最后的点, 别弄丢了, 它表示: Application = 当前目录。
第一次比较慢。
成功后最后会看到
Memory region Used Size Region Size %age Used FLASH:15736B512KB3.00% RAM:4480B64KB6.84% CCM:0GB16KB0.00% IDT_LIST:0GB32KB0.00% Generating files from /home/cxicc/workspace/hello_world/build/zephyr/zephyr.elfforboard: nucleo_f303rebuild 目录
build/ ├── zephyr ├── CMakeCache.txt ├── compile_commands.json...其中最重要的是
build/zephyr/zephyr.elf build/zephyr/zephyr.bin build/zephyr/zephyr.hexStep8 烧录 STM32
1. 下载 STM32CubeProgrammer
从 ST 官方页面下载 Linux 版本:
STM32CubeProgrammer 官方下载页
你需要选择 Linux 版本。
ST 下载通常需要接受许可协议,可能要求登录 ST 账号。
2. 安装到你的 home 目录
假设下载后的安装文件类似:
~/Downloads/en.stm32cubeprg-lin-v*.sh3. USB 权限问题
配置 udev
STM32/ST-LINK 通常应该通过 Linux udev 规则,让普通用户访问 USB 设备。
可以创建:
sudonano/etc/udev/rules.d/49-stlinkv2-1.rules加入:
SUBSYSTEM=="usb", ATTR{idVendor}=="0483",MODE="0666"保存后:
sudoudevadm control --reload-rulessudoudevadm trigger然后拔掉 Nucleo USB,再重新插入。
对很多系统, 最后两个命令可不用执行。
4. 下载
连接 USB
执行
west flash默认调用 openocd 或者st-flash, 这要取决于系统。
看到
Flash written successfully
说明完成。
Step9 打开串口
把当前用户加入 dialout
sudousermod-aGdialout$USER注意:当前终端不会立即获得新组权限。
最简单的方法是退出 Ubuntu 用户并重新登录。如果是在 VirtualBox 里,直接重启 Ubuntu VM 也可以:
sudorebootpicocom-b115200/dev/ttyACM0或者
minicom输出应该不断出现:
Hello Zephyr!Hello Zephyr!Hello Zephyr!Step10 编译 ESP32S3
如果已经安装好 Espressif SDK,可以编译:
west build-besp32s3_devkitc如果你的开发板型号不同,先确认正确的 board 名称。
Step11 理解 west build
执行
west build-bnucleo_f303re实际上会依次完成:
Application │ ▼ CMake │ ▼ Kconfig │ ▼ Device Tree │ ▼ Generate Headers │ ▼ Compile │ ▼ Link │ ▼ zephyr.elf │ ▼ bin / hexStep12 常用命令
第一次编译
west build-bnucleo_f303re清理后重新配置
west build-palways-bnucleo_f303re烧录
west flash查看日志
west build-tmenuconfig查看编译目标
west build-thelpStep12 快捷的shell脚本
一般为了保证工程独立性, 不会把worksapce放在zephyrproject, zephye-sdk-xxx 目录中, 像我就放在HOME目录,在其中创建一个shell 脚本:start.sh, 只要 $ source start.sh 或 . start.sh 就可以设置环境, 检查ZEPHYR_BASE, 所有的bitbake扩展都依赖它!
#!/bin/bashcd~/zephyrproject||exit1source.venv/bin/activatesourcezephyr/zephyr-env.shecho"Zephyr environment ready."echo"ZEPHYR_BASE=$ZEPHYR_BASE"echo"Python=$(whichpython)"echo"West=$(whichwest)"本课需要掌握的知识
完成本课后,你应该能够回答:
1.Zephyr 应用至少包含哪些文件?
- CMakeLists.txt - prj.conf - src/main.c2.prj.conf 的作用是什么?
- 配置 Kconfig 选项,启用或禁用 Zephyr 功能(如 GPIO、UART、Bluetooth 等)。3.west build 做了哪些事情?
- 配置 CMake、解析 Kconfig 和 Device Tree、编译、链接,并生成可烧录的固件。4.build/zephyr/ 下最重要的文件有哪些?
- zephyr.elf(调试) - zephyr.bin(烧录) - zephyr.hex(部分烧录工具使用)建议的实践顺序(结合你的硬件)
由于你目前有 NUCLEO-F303RE 和 ESP32-S3,建议先完成:
1.在 nucleo_f303re 上成功编译、烧录并看到 Hello Zephyr!。2.再切换到 ESP32-S3,体验不同 Board 的构建流程。3.两块板都成功后,再进入下一课 03-GPIO(LED Blink),学习 GPIO、Device Tree 和板级外设配置。