已在内核启用device tree overlay功能,应在哪里编写overlay设备树内容?
设备树Overlay(DTBO)编写及使用操作指南
一、编写位置选择
- 如果你是为自定义外设开发overlay,可在任意本地工作目录创建
.dts后缀的overlay源文件,无需强制放入内核源码树。 - 如果你需要将overlay编译进内核镜像,建议放到内核源码对应架构的overlay目录:
arch/<架构>/boot/dts/overlays/,和官方overlay文件统一管理。
二、基础编写规范
overlay的语法和普通设备树一致,核心是指定要修改的目标节点路径,补充或覆盖节点属性,基础模板如下:
/dts-v1/; /plugin/; &{/soc/i2c@12340000} { // 此处可填目标节点的绝对路径,也可以直接引用内核原生设备树定义的节点标签,比如&i2c1 #address-cells = <1>; #size-cells = <0>; status = "okay"; sensor@38 { // 你要新增的外设节点 compatible = "vendor,xxx-sensor"; reg = <0x38>; status = "okay"; }; };
- 必须添加
/plugin/;标记,标识这是overlay格式文件,编译时会生成符合overlay规范的dtbo文件。 - 修改节点属性时,优先级高于原生设备树的同名属性,不会修改原生dts源码内容。
三、编译方法
独立编译(无需完整内核源码)
提前安装设备树编译器dtc,执行命令编译即可:
dtc -I dts -O dtbo -o my_overlay.dtbo my_overlay.dts
内核源码树内编译
- 将编写好的overlay文件放入
arch/<架构>/boot/dts/overlays/目录 - 修改该目录下的
Makefile,添加编译规则:dtb-$(CONFIG_OF_OVERLAY) += my_overlay.dtbo - 执行内核设备树编译命令:
make dtbs
编译生成的dtbo文件会输出到对应架构的dts输出目录。
四、加载使用
编译完成的dtbo文件放到开发板/boot/overlays/目录下,可根据引导方式选择加载逻辑:
- U-Boot引导的设备,可在U-Boot环境变量中添加
fdt apply /path/to/my_overlay.dtbo命令开机自动加载 - 支持config.txt配置的设备(比如树莓派),直接在
/boot/config.txt中添加一行dtoverlay=my_overlay即可 - 系统运行时动态加载,先确保configfs挂载:
mount -t configfs none /sys/kernel/config mkdir /sys/kernel/config/device-tree/overlays/my_overlay cat my_overlay.dtbo > /sys/kernel/config/device-tree/overlays/my_overlay/dtbo
内容的提问来源于stack exchange,提问作者malik
相关产品推荐
相关产品推荐

