news 2026/9/10 18:19:05

10分钟零硬件跑通Zephyr RTOS第一条输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
10分钟零硬件跑通Zephyr RTOS第一条输出

10分钟零硬件跑通Zephyr RTOS第一条输出

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

把 Zephyr RTOS 仓库拉下来之后,满目录的 CMakeLists 和 Kconfig,你不确定第一条命令该敲什么。这篇教程全程不碰硬件,用 QEMU 把 hello world 跑到屏幕上,只敲十几条命令。

三句话说清这个项目

  • Zephyr RTOS 是专为资源受限设备优化的开源实时操作系统。
  • 它解决的核心痛点:没有开发板、不想搭仿真环境,也能写、编译、调试嵌入式应用。
  • 硬指标:内核最小配置约 10KB RAM;支持 ARM、x86、RISC-V 等架构;内置 400+ 块可运行开发板定义,其中 QEMU 虚拟板无需硬件。

官方文档入口:doc/index.rst README 入口:README.rst

一条命令装齐构建链

sudo apt update && sudo apt install -y git cmake ninja-build gperf ccache dfu-util \ device-tree-compiler wget python3-dev python3-pip python3-setuptools python3-tk \ python3-wheel xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev

这条命令实际在干什么:一次装齐 git、cmake、ninja-build、设备树编译器、gcc 等 Zephyr 构建工具链,外加 QEMU 运行界面用的 SDL2 库。

pip3 install -r scripts/requirements.txt

这条命令装 Python 侧依赖(west 工具用的脚本),源文件见 scripts/requirements.txt。

git clone https://gitcode.com/GitHub_Trending/ze/zephyr && cd zephyr && source zephyr-env.sh

这条命令拉取仓库并加载环境变量,之后west命令才可用,环境脚本见 zephyr-env.sh。

打开最小样例,只看两个文件

样例就 4 个文件加 1 个源文件,目录树如下:

samples/hello_world/ ├── CMakeLists.txt # 构建配置 ├── prj.conf # 内核配置(本样例为空) ├── tests.yaml # 测试元数据 ├── README.rst # 说明文档 └── src/ └── main.c # 主程序

构建入口见 samples/hello_world/CMakeLists.txt:

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) project(hello_world) target_sources(app PRIVATE src/main.c)

find_package那行告诉 CMake 去哪找 Zephyr 内核,target_sourcessrc/main.c加进应用,整个构建系统就靠这两句话接上。

主程序见 samples/hello_world/src/main.c:

#include <stdio.h> int main(void) { printf("Hello World! %s\n", CONFIG_BOARD_TARGET); return 0; }

注意CONFIG_BOARD_TARGET:它不是写死的字符串,是 Kconfig 配置系统在编译时按你选的目标板自动填进去的宏。后面换板子,这行代码不用动,输出会变。

两条命令构建并看到输出

west build -b qemu_x86 samples/hello_world west build -t run

第一步就是告诉构建系统你要编译哪个板子,这里选qemu_x86,因为它在 QEMU 里跑,一块硬件都不用买。第二步编译完直接拉起 QEMU 前台运行。

跑起来后,终端输出大致长这样:

SeaBIOS (version rel-1.16.0-0-gd239552ce722-prebuilt.qemu.org) Booting from ROM.. *** Booting Zephyr OS build zephyr-v4.4.99 *** Hello World! x86

能逐字对上最后两行,就算跑通了。版本号一行取自本地构建时的版本信息,具体以你的终端为准。⚠️ QEMU 是前台进程,停掉它要先按Ctrl+A再按x

改一个字符串验证编译

把 samples/hello_world/src/main.c 里的Hello World!改成Hello Zephyr!,然后:

west build -t run

输出从Hello World! x86变成Hello Zephyr! x86,就说明改动真的进了二进制,你手里这个东西完全可控。

换一种架构再跑一遍

rm -rf build west build -b qemu_cortex_m3 samples/hello_world west build -t run

这一步把目标从 x86 虚拟板换成 ARM Cortex-M3 虚拟板。预期差异:输出里没了 SeaBIOS 那段 BIOS 提示,Hello Zephyr!后面的板名从x86变成cortex_m3。同一段源码,两种架构,命令只改了一个-b参数。

真实硬件开发板也一样:把-b换成对应板名即可,命令完全不变。

三个高频坑的速查表

症状一条修复命令一句话原因
west提示 command not foundsource zephyr-env.sh环境变量没加载,当前 shell 找不到 west
改了代码,输出没变rm -rf build && west build -b qemu_x86 samples/hello_world旧构建缓存没清,增量编译没生效
QEMU 窗口卡住退不出先按Ctrl+A再按xQEMU 前台运行,这是它的退出快捷键

读完这篇往哪走

  • 内核层:读 kernel/ 目录下的线程、调度器源码,搞懂main()之前内核干了什么。
  • 驱动层:翻 drivers/ 看 GPIO、UART、I2C 这些驱动是怎么接进设备模型的。
  • 应用层:从 samples/basic/ 的 LED 闪烁、线程、定时器样例入手,开始写自己的东西。

下一篇写 Zephyr 多线程与中断处理,到时候你会把main()里的单线程拆成两个协作的线程。

本文基于 Zephyr v4.4.99 开发树撰写,版本号文件见 VERSION。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 18:17:45

Windows下Redis密码设置与安全加固指南

1. Windows环境下Redis密码修改全指南Redis作为当前最流行的内存数据库之一&#xff0c;在Windows环境下的应用场景越来越广泛。很多开发者在本地开发环境或测试环境中都会选择在Windows上安装Redis服务。但默认安装的Redis是没有密码保护的&#xff0c;这就好比把家门钥匙插在…

作者头像 李华
网站建设 2026/9/10 18:15:55

用户验收测试(UAT)全流程指南与实战技巧

1. 用户验收测试的本质与价值 用户验收测试&#xff08;User Acceptance Testing&#xff0c;简称UAT&#xff09;是软件交付前的最后一道质量关卡。作为在银行系统做了8年测试的老兵&#xff0c;我见证过太多团队在这个环节翻车——有因为测试用例设计不当导致生产环境崩溃的&…

作者头像 李华
网站建设 2026/9/10 18:13:53

python-dateutil报错排查:从环境错乱到依赖冲突的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 18:11:32

电商数据目录技术:破解PB级数据治理难题

1. 电商行业数据管理的核心挑战与破局思路 在电商行业摸爬滚打多年&#xff0c;我亲眼见证了数据量从GB级到PB级的爆炸式增长。三年前参与某头部电商平台数据中台建设时&#xff0c;我们面对的是分散在47个业务系统的数据孤岛&#xff0c;商品信息在不同系统中存在30%以上的差异…

作者头像 李华
网站建设 2026/9/10 18:11:31

X射线检测揭秘DC-DC电源模块内部结构与失效隐患

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华