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