设备树:描述硬件连接
设备树(Devicetree)让硬件描述与应用逻辑分离。Zephyr 在构建阶段处理 DTS、DTSI 和 overlay,生成供驱动与应用使用的内容。
先认识几个词
| 概念 | 用途 |
|---|---|
| 节点 | 描述一个控制器或设备 |
| 属性 | 描述地址、中断、GPIO 等参数 |
compatible | 将节点与 binding 对应起来 |
| node label | 如 learning_led:,供其他节点引用 |
| alias | 如 led0,给应用一个约定名称 |
| overlay | 在板卡默认描述上补充或覆盖配置 |
从 LED 理解数据流
板卡 DTS + app.overlay
↓
构建生成 zephyr.dts
↓
DT_ALIAS(led0) / GPIO_DT_SPEC_GET(...)
↓
GPIO 驱动操作对应引脚
在 Blinky 实验中,led0 = &learning_led 指向 LED 节点;节点的 gpios 指明控制器、引脚和有效电平。程序依赖 led0,因此更换硬件时主要修改描述。
修改后怎样确认生效
先看构建日志是否列出指定 overlay,再查看 build/blinky/zephyr/zephyr.dts。它是合并结果,适合定位“我写了配置,但没生效”的问题。
常见原因:文件路径不对、overlay 被其他默认文件选择规则影响、旧构建缓存、控制器未启用,或选择了错误板卡。
和 Kconfig 的边界
设备树侧重硬件实例与连接;Kconfig 侧重软件功能选择。外设存在,不等于相应驱动已经编入固件;驱动启用,也不代表硬件接线正确。
官方来源
基于 Zephyr v4.2.0 官方资料整理的中文学习笔记,非逐字翻译;命令及说明作了学习场景适配。