☰
Zephyr应用: 09-Overlay
2026/9/29 3:31:25 网站建设 项目流程

摘要:Overlay 是 Zephyr 中不修改板级 DTS 即可定制硬件描述的核心机制。本文讲解 Overlay 的作用、放置位置、常见用法(新增节点、修改属性、添加别名、配置 GPIO/SPI/UART),并厘清 Overlay 与 Kconfig 的分工:Kconfig 决定编译哪些驱动,Overlay 决定驱动对应哪些硬件实例。最后通过两个 STM32 Nucleo-F303RE 实验(修改 USART2 波特率、添加自定义 Alias)演示 Overlay 的调试方法——查看build/zephyr/zephyr.dts与devicetree_generated.h确认生效。

09-Overlay(DeviceTree Overlay)

这是Zephyr DeviceTree系列中最重要的一课。

1. 什么是 Overlay?
前一课我们修改的是 Board 自带的 DTS。
例如
boards/st/nucleo_f303re/nucleo_f303re.dts
但是:
千万不要去改 SDK 里的 DTS!
原因:
升级 Zephyr 后全部丢失。
所以 Zephyr 提供了

app.overlay

或者

<board>.overlay

编译时自动叠加进去。
例如

nucleo_f303re.overlay

编译时实际上就是

Board DTS + Overlay ↓ 最终 DeviceTree

所以 Overlay 可以理解成
DeviceTree 的补丁(Patch)

2. Overlay 的位置
例如:

hello_world/ │ ├── src/ ├── CMakeLists.txt ├── prj.conf └── nucleo_f303re.overlay

如果编译

west build-b nucleo_f303re

Zephyr 会自动找到

nucleo_f303re.overlay

无需任何配置。

3. Overlay 可以做什么?

几乎所有 DeviceTree 修改都可以放进去。
例如:
增加 LED

/{aliases{myled=&led0;};};

增加 Button

/{aliases{mybutton=&button0;};};

增加 SPI Device

&spi1{status="okay";my_sensor@0{compatible="mycompany,my-sensor";reg=<0>;};};

增加 UART

&usart2{status="okay";};

全部不用修改 Board DTS。

4. Overlay 修改已有节点
例如:

Board DTS&usart2{current-speed=<115200>;};

Overlay

&usart2{current-speed=<9600>;};

最终结果

9600

Overlay 覆盖原来的属性。

5. 新增节点
例如:

/{mynode{compatible="demo";};};

编译后

DT_NODELABEL(mynode)

即可获得。

6. 修改 GPIO
例如:

&gpioa{status="okay";};

或者

&gpioa{myled{gpios=<...>;};};

7. Overlay 最常见用途——添加自己的设备
例如:

&spi1{imu@0{compatible="bosch,bmi270";reg=<0>;};};

驱动里

DT_INST_FOREACH_STATUS_OKAY(...)

即可找到。

所以:
Overlay 是 Driver 与 Hardware 的桥梁。

8. Overlay 与 Kconfig 的关系
很多初学者容易混淆:
Kconfig
决定
编译什么代码

例如

CONFIG_UART=yCONFIG_SPI=yCONFIG_SENSOR=y

Overlay
决定
硬件长什么样
例如

SPI1 ↓ 挂了 BMI270

因此:

Kconfig ↓ Driver 编译
Overlay ↓ Driver 实例化

两者缺一不可。

9. 查看 Overlay 是否生效
编译:

west build-bnucleo_f303re

查看生成文件:

build/zephyr/zephyr.dts

这里就是:

Board DTS + Overlay

最终结果。

例如搜索:

my_sensor
grepmy_sensor build/zephyr/zephyr.dts

或者

grepcurrent-speed build/zephyr/zephyr.dts

下面是 Overlay 从编写到生效的完整流程:

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询