news 2026/9/10 22:27:37

Zephyr RTOS 上手:west 装完工具链,20 分钟点亮第一盏 LED

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr RTOS 上手:west 装完工具链,20 分钟点亮第一盏 LED

Zephyr RTOS 上手:west 装完工具链,20 分钟点亮第一盏 LED

【免费下载链接】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 编译 blinky,大概率会卡在这个报错上:GCC 在GPIO_DT_SPEC_GET那一行抛出error: '__device_dts_ord_DT_N_ALIAS_led_P_gpios_IDX_0_PH_ORD' undeclared。Zephyr RTOS 是面向资源受限设备的可扩展实时操作系统,覆盖 ARM、x86、ARC、RISC-V 等架构,内核可裁剪到几 KB。这个报错不是工具链坏了,而是你选的板卡 devicetree 里没有声明led0别名,GPIO 句柄根本生成不出来。文章按"装工具链 → QEMU 无硬件跑通 → 读懂 blinky → 排查卡点"的顺序走完一遍,全程命令都可以直接复制。

把工具链一次装齐:west 的 5 条命令

Zephyr 用 west 做工作区管理,仓库根目录的 west.yml 把 HAL、加密库等几十个外部模块的 revision 全部钉死,所以装环境本质就是"拉工作区 + 装 SDK"两件事。

  1. 装系统依赖。以 Ubuntu 为例(Fedora / Arch 是同一组包名的 dnf / pacman 变体,清单见 doc/develop/getting_started/installation_linux.rst):
sudo apt install --no-install-recommends git cmake ninja-build gperf ccache \ dfu-util device-tree-compiler wget python3-dev python3-venv python3-tk \ xz-utils file make gcc gcc-multilib g++-multilib libsdl2-dev libmagic1
  1. 建虚拟环境并装 west:
python3 -m venv ~/zephyrproject/.venv source ~/zephyrproject/.venv/bin/activate pip install west
  1. 拉工作区。仓库地址用 https://link.gitcode.com/i/451078e5160845043c3d9ab091579b6d:
west init -m https://link.gitcode.com/i/451078e5160845043c3d9ab091579b6d --mr main ~/zephyrproject cd ~/zephyrproject west update
  1. 导出环境变量并装 Python 依赖:
west zephyr-export west packages pip install
  1. 装 Zephyr SDK(含各架构交叉编译器、QEMU、OpenOCD):
west sdk install

版本要求就两条,卡住先查这两项:

依赖要求说明
CMake≥ 3.28仓库示例的 CMakeLists 里是cmake_minimum_required(VERSION 3.28.0),老版本会直接 FATAL_ERROR
Python3.x,建议 venvwestwest packages都装在 venv 里

仓库根目录的 VERSION 显示当前主干是 4.4 开发版,west update拉下来的就是它。

没有开发板也能跑:在 QEMU 里点着 Zephyr RTOS 的第一盏灯

没买板子也别跳过实践。Zephyr 在 boards/qemu/ 下维护了一组虚拟板卡,qemu_x86的 devicetree 里定义了虚拟 LED(带led0别名),blinky 可以直接在上面跑:

cd ~/zephyrproject/zephyr west build -b qemu_x86 -p always samples/basic/blinky west build -t run

第二条命令等于"编译 + 用 QEMU 跑起来"。串口号上每秒刷一行LED state: ON/LED state: OFF,QEMU 窗口里那颗绿色小灯同步闪烁。跑通这一步,工具链、设备树、内核、串口控制台整条链路就都验证过了。之后换真实板卡,只是-b的板卡名变了,流程不变。

有板子了怎么烧:一条 west flash

手里有板子(boards/index.rst 里能查到名字的那种,从 Adafruit、Nordic 到 NXP 的板子都支持)时,流程就三步:

  1. west build -b <board-name> -p always samples/basic/blinky
  2. west flash—— 用哪个调试器由板卡配置决定,J-Link、OpenOCD、DAPLink 等常见 runner 都内置了
  3. 烧录失败时west flash --runner <runner名>显式指定调试工具,多数"烧不进去"都是 runner 选错或线没接好

blinky 只有 48 行:设备树别名怎么变成 GPIO 句柄

跑通之后值得把源码读一遍,samples/basic/blinky/src/main.c 总共 48 行,核心就这两行:

#define LED0_NODE DT_ALIAS(led0) static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios);

因果链是这样的:led0是 devicetree 里的 alias,板卡的 .dts 把它指向具体引脚;DT_ALIAS在编译期展开成节点 ID;GPIO_DT_SPEC_GET再用这个 ID 取出"哪个 GPIO 控制器、哪个引脚、什么极性"的gpio_dt_spec结构体。所以板卡 dts 里没写led0,这一行就编译不过——开头那个报错的根因就在这。

再看 samples/basic/blinky/prj.conf,整个文件只有一行:

CONFIG_GPIO=y

Zephyr RTOS 的 Kconfig 体系只编译你显式开启的模块,这就是内核能压到几 KB 的原因,也是后面"改三行 conf"能玩出花样来的基础。

改三行 conf,让 Zephyr RTOS 的日志和 shell 跑起来

自己的应用建好后(CMakeLists.txt+prj.conf+src/main.c三件套,照 samples/hello_world/ 抄即可),往prj.conf里加三行:

CONFIG_LOG=y CONFIG_SHELL=y CONFIG_SHELL_BACKEND_SERIAL=y

然后:

  • 代码里#include <zephyr/logging/log.h>,注册LOG_MODULE_REGISTER(main)后用LOG_INF("...")打日志;
  • west build -t run之后,QEMU 串口控制台可以直接敲helpkernel threads等命令,实时看到线程栈水位和状态;
  • 想逐项翻选项,west build -t menuconfig开图形界面,比手改 conf 稳妥。

仓库结构速读:boards、soc、drivers 谁管什么

能跑起来之后,花十分钟把仓库顶层过一遍,后面查问题会快很多:

  • boards/—— 约 140 家厂商,每块板一个目录,装 dts、defconfig 和文档。boards/nordic/ 和 boards/st/ 是里面最大的两个。
  • soc/—— SoC 级代码,一家一目录,管启动、链接脚本、内存布局。
  • dts/bindings/—— 4000 多个设备绑定定义(yaml),写 dts 时属性名拿不准就来这里对。
  • drivers/—— 按设备类型分的 100 多个驱动类:gpio/、serial/、flash/、ethernet/ 等。
  • kernel/—— 调度、线程、超时这些核心;subsys/—— 网络、蓝牙、shell、logging、fs 等子系统。
  • samples/tests/—— 示例当教程读,tests/ 有 1.5 万个文件,仓库里相当一部分体积是测试用例。

卡住时按顺序查这 4 处

  1. ⚠️led0相关编译错误:看 build 目录下生成的 .dts 文件,确认led0alias 存在、父节点compatible = "gpio-leds"。没有就照 samples/basic/blinky/README.rst 里 "Adding board support" 的示例补上。
  2. west: command not found:venv 没激活。source ~/zephyrproject/.venv/bin/activate再试。
  3. CMake 报版本不够:本仓库需要 3.28+,cmake --version查看,Ubuntu 上sudo snap install cmake最省事。
  4. 烧录失败:先核对-b的板卡名和实际板子完全一致(含_rev部分),再用west flash --runner显式指定调试器。

接下来可以做的 3 件事

  1. 给自己的板子加 LED:照 samples/basic/blinky/README.rst 的 "Adding board support" 在板卡 overlay 里声明led0,重编 blinky,把开头那个报错亲手消掉。
  2. 读一个完整驱动:打开 drivers/gpio/ 找你芯片对应的驱动,通读一遍,再对照 dts/bindings/ 里对应绑定,看 dts 属性是怎么映射成驱动参数的。
  3. 往内核里走一层:线程、同步、调度的文档在 doc/kernel/;想看 4.4 这版新增了哪些特性,查 doc/releases/ 的发布说明。

【免费下载链接】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 22:25:35

如何用CVAT自动标注功能给图像和视频快速预标注

如何用CVAT自动标注功能给图像和视频快速预标注 【免费下载链接】cvat Computer Vision Annotation Tool (CVAT) is a leading platform for building high-quality visual datasets for vision AI. It offers open-source, cloud, and enterprise products, as well as labeli…

作者头像 李华
网站建设 2026/9/10 22:23:46

L站 | Linux.do2026最新入站申请【Lite/青春版】

文章目录&#x1f9ed; LinuxDo 是什么&#xff1f;&#x1f31f; 为什么越来越多人开始关注 LinuxDo&#xff1f;1️⃣ 内容质量明显更高2️⃣ 社区氛围相对克制3️⃣ 邀请制机制&#xff08;门槛 质量&#xff09;⚠️ 一些理性建议&#xff08;新用户必看&#xff09;✍️ …

作者头像 李华
网站建设 2026/9/10 22:23:24

AI检测与论文降重工具的技术原理与应用对比

1. 毕业论文降AI检测的现状与挑战2023年秋季学期开始&#xff0c;国内多所高校陆续部署了AI生成内容检测系统。某985高校文学院的研究生导师向我展示过一份检测报告&#xff1a;学生提交的初稿被标出47%的AI生成概率&#xff0c;其中文献综述部分甚至达到82%。这并非个例&#…

作者头像 李华
网站建设 2026/9/10 22:22:20

K8s 1.33原地扩缩容特性解析与实战指南

1. K8s 1.33 原地扩缩容特性深度解析最近在测试K8s 1.33版本时&#xff0c;发现其原地扩缩容(In-place Resize)特性有了显著改进。这个功能对于需要频繁调整资源的工作负载来说简直是福音&#xff0c;特别是那些有状态服务。今天就来详细拆解这个特性的实现原理和最佳实践。2. …

作者头像 李华
网站建设 2026/9/10 22:20:34

立体仓库智能物流系统核心技术解析与应用实践

1. 立体仓库智能物流系统概述在制造业和电商物流领域&#xff0c;立体仓库智能物流系统已经成为提升仓储效率的革命性解决方案。这套系统通过自动化设备和智能控制软件的协同工作&#xff0c;实现了货物从入库到出库的全流程无人化操作。我参与实施的某汽车零部件企业立体仓库项…

作者头像 李华