10分钟跑通Zephyr RTOS:QEMU 免硬件上手指南
【免费下载链接】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(实时操作系统,专为资源受限设备优化的开源内核)能让一段嵌入式程序不接开发板、直接在你的终端里跑起来。读完这篇,你会用 west 命令构建并启动一个 hello_world 示例,看到 "Hello World" 输出,并知道怎么把它改成自己的版本。
项目一瞥
Zephyr RTOS 替你把内核、设备驱动和构建系统打包好,你只需写应用逻辑。它适合想上手嵌入式却暂时没有开发板、或想快速验证内核行为的人。它同时支持 ARM、x86、RISC-V 等多种架构。
- 免硬件:用 QEMU(一个开源机器模拟器)当虚拟开发板
- 内核小巧:最小配置只占用很少的 RAM
首次运行
先一次性装齐工具链并拉下源码。
一条命令装依赖并克隆仓库
这条命令装好 cmake、ninja 等构建工具,再把 Zephyr 源码克隆到本地:
sudo apt update && sudo apt install -y cmake ninja-build gperf ccache dfu-util device-tree-compiler wget python3-dev python3-pip python3-setuptools python3-wheel xz-utils make gcc g++ libsdl2-dev git clone https://gitcode.com/GitHub_Trending/ze/zephyr加载 west 环境并构建启动
west 是 Zephyr 的官方构建工具,负责解析项目并调度 CMake。加载环境、装 Python 依赖,然后针对qemu_x86板构建并自动启动模拟器:
cd zephyr && source zephyr-env.sh && pip3 install -r scripts/requirements.txt west build -b qemu_x86 samples/hello_world # -b 指定目标板 west build -t run # -t run 构建并运行看首次输出
看到下面两行即成功(QEMU 用 Ctrl+A 再按 X 退出):
*** Booting Zephyr OS build zephyr-v4.4.99 *** Hello World! x86最小示例拆解
整个示例只有四个文件:src/main.c是入口,prj.conf放内核配置项,CMakeLists.txt告诉构建系统要编译哪些源码,README.rst是说明。真正干活的只有一行:printf("Hello World! %s\n", CONFIG_BOARD_TARGET);
这行打印固定文案外加板名,因为CONFIG_BOARD_TARGET是 Kconfig(Zephyr 的配置系统)在编译期生成的宏,会自动展开成目标板名。你不用写任何内核初始化代码,Zephyr 内核启动后会自己调用main。
samples/hello_world/src/main.c:主程序,只有一行printfsamples/hello_world/prj.conf:内核配置,本例为空samples/hello_world/CMakeLists.txt:声明编译入口
改成你的版本
改完立即重跑就能看到效果,这是嵌入式开发最快的反馈循环。
改输出内容
把main.c里的printf改成你自己的文案(比如加一句问候和板名),保存后重新运行:
#include <stdio.h> int main(void) { printf("Hello Zephyr on %s!\n", CONFIG_BOARD_TARGET); return 0; }west build -t run换目标板
想跑在 Cortex-M3 架构上,把-b换成qemu_cortex_m3即可:west build -b qemu_cortex_m3 samples/hello_world。板名决定编译出的指令集,QEMU 会按该板对应的机器类型启动。
常见卡点
- 报 CMake 缓存冲突:删掉构建目录重来——
rm -rf build && west build -b qemu_x86 samples/hello_world。 - 提示找不到 west:当前 shell 没加载环境,回到仓库根目录再执行
source zephyr-env.sh。 - 卡在某行下载依赖:检查网络与代理,
pip3 install -r scripts/requirements.txt失败时可看scripts/requirements.txt定位缺哪个包。
下一步去哪
- 想理解内核怎么调度任务:读 doc/kernel/ 里的内核文档
- 想接真实外设:从 drivers/ 挑一个驱动(如 gpio、serial)看配置
- 想做网络应用:跑 samples/net/ 下的示例
版本基线:本文基于 Zephyr v4.4 编写,不同版本的依赖与输出可能略有差异。
【免费下载链接】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),仅供参考