当前位置: 首页 > news >正文

轻松学习Zephyr: 03-Helloworld

文章摘要

本文是 Zephyr RTOS 学习计划的第 2 课,详细介绍了如何创建、编译和运行第一个 Zephyr “Hello World” 应用程序。主要内容包括:

  1. 环境准备:激活 Zephyr 开发环境并创建工作空间
  2. 工程创建:建立完整的 Zephyr 应用目录结构(CMakeLists.txt、prj.conf、src/main.c)
  3. 编译流程:使用 west 工具链编译 STM32 (nucleo_f303re) 和 ESP32-S3 目标
  4. 烧录与调试:STM32CubeProgrammer 安装、USB 权限配置、串口监控
  5. west build 解析:理解 Zephyr 构建系统的完整工作流程
  6. 实践建议:针对 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.c

Step6 查看开发板名称
查看所有 board

west boards

STM32 F303RE
应该看到

nucleo_f303re

ESP32S3
一般是

esp32s3_devkitc

不同 ESP32S3 板子名称可能不同。
可以搜索

west boards|grepesp32

Step7 编译 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_f303re

build 目录

build/ ├── zephyr ├── CMakeCache.txt ├── compile_commands.json...

其中最重要的是

build/zephyr/zephyr.elf build/zephyr/zephyr.bin build/zephyr/zephyr.hex

Step8 烧录 STM32
1. 下载 STM32CubeProgrammer
从 ST 官方页面下载 Linux 版本:

STM32CubeProgrammer 官方下载页

你需要选择 Linux 版本。
ST 下载通常需要接受许可协议,可能要求登录 ST 账号。

2. 安装到你的 home 目录
假设下载后的安装文件类似:

~/Downloads/en.stm32cubeprg-lin-v*.sh

3. 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 也可以:

sudoreboot
picocom-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 / hex

Step12 常用命令
第一次编译

west build-bnucleo_f303re

清理后重新配置

west build-palways-bnucleo_f303re

烧录

west flash

查看日志

west build-tmenuconfig

查看编译目标

west build-thelp

Step12 快捷的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.c

2.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 和板级外设配置。
http://www.jsqmd.com/news/1382357/

相关文章:

  • 2026年8月合肥市瑶海区移动500M宽带怎么选怎么办才靠谱 - 找卡家园
  • RAG技术全流程解析:从向量检索到智能问答的工程实践
  • SAP Fiori Launchpad中Contact Support按钮的显示逻辑与配置
  • 二叉树中序遍历:原理、实现与工程应用
  • 技术竞赛项目全流程部署与实战指南:从环境搭建到性能优化
  • 第7章 HDR成像基础
  • MySQL 8.0降级至5.7实战指南:数据安全迁移与版本兼容性处理
  • DSC显示流压缩技术:从视觉无损原理到工程实践全解析
  • 推荐口碑好的值班岗亭制造商:严选 - 品牌推广大师
  • 阿里千问开放平台:大模型驱动的生活服务对话式集成开发指南
  • 【Bug已解决】[WebGPU EP] Meta-Llama-3.1-8B inference crash on QNN environments 解决方案
  • Ubuntu双系统安装与配置全攻略:从零搭建高效开发环境
  • Maven测试失败排查指南:从Surefire插件错误到十种常见场景解决方案
  • [基于OpenEvals的自动化评估-14]以静态代码分析方式评估Agent生成的代码
  • Recovery模式(恢复模式)
  • C++与Java性能深度对比与现代优化实践
  • 从“汤头”看体质:九种体质辨识+五运六气辨证,手把手教你完成完整自测
  • Unity与Visual Studio开发环境搭建:从硬件检查到调试验证的完整指南
  • 轻松学习Zephyr: 04-从零构建Blinky
  • JavaScript 去混淆器终极指南:快速解密混淆代码的完整教程 [特殊字符]
  • YOLOv8移动端部署全流程:从模型量化到安卓集成实战
  • 华为eNSP防火墙实验:从零搭建到安全策略与NAT实战
  • D3DXSkinManage 更新检查问题解决方案:3步解决强制更新困扰
  • AI学术写作平台:从选题到成稿的全流程智能辅助
  • Java随谈(七)代码优化思路之用空间换时间
  • 南通启益建设集团有限公司网站:见证本土工程实力的成长轨迹与服务承诺
  • FModel终极指南:解锁虚幻引擎游戏资源的完整免费工具
  • 别只盯着模型了!AI应用开发的五层技术栈全解析,从GPU到用户界面!
  • Slashscore:基于GitHub数据的开发者关系图谱分析与应用指南
  • 从Prompt到Skill-Creator:AI能力工程化实战指南