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_sources把src/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 found | source zephyr-env.sh | 环境变量没加载,当前 shell 找不到 west |
| 改了代码,输出没变 | rm -rf build && west build -b qemu_x86 samples/hello_world | 旧构建缓存没清,增量编译没生效 |
| QEMU 窗口卡住退不出 | 先按Ctrl+A再按x | QEMU 前台运行,这是它的退出快捷键 |
读完这篇往哪走
- 内核层:读 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),仅供参考