07、设备树插件 (Device Tree Overlays)
Linux 4.4以后新增了"设备树插件"功能。你可以把它理解为给主设备树打补丁的工具——就像拼图一样动态添加到系统中,内核能自动识别。
比如你要给系统添加RGB灯驱动:只需为RGB硬件单独写一个设备树插件文件,编译后加载到系统就行,完全不用重新编译整个设备树。
设备树插件就是给主设备树做"加法",之前学过的所有设备树语法都能用。甚至可以直接把之前写好的设备树节点内容复制过来用就行。
一、设备树插件格式
设备树插件拥有相对固定的格式,甚至可以认为它只是把设备节点加了一个“壳”编译后内核能够动态加载它。格式如下,具体节点省略。
目录:kernel/arch/arm64/boot/dts/rockchip/overlay/rk356x-lubancat-pwm7-ir-overlay.dts
C
/dts-v1/;
/plugin/;
/ {
compatible = "rockchip,rk3568";
fragment@0 {
target = <&pwm7>;
__overlay__ {
status = "okay";
};
};
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
/dts-v1/;
和/plugin/;
:这些是 Device Tree 的头部声明,指定了使用的 Device Tree 版本和插件。compatible = "rockchip,rk3568";
:这里指定了设备树描述的硬件平台fragment@0 { ... };
:这是一个设备树片段,用于描述特定硬件组件的配置。target = <&pwm7>;
:这里指定了片段应用的目标,即设备树中的 PWM7 控制器。overlay { ... };
:这是一个特殊的语法,表示将以下配置作为设备树的覆盖层应用到目标节点上。status = "okay";
:这行指定了 PWM7 控制器的状态为 "okay",表示设备树启用了这个 PWM 控制器。
二、编译
修改内核目录/arch/arm64/boot/dts/rockchip/overlays 下的 Makefile 文件,添加我们编辑好的设备树插件。并把设备树插件文件放在和 Makefile 文件同级目录下。以进行设备树插件的编译。
C
// 加载配置文件
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- lubancat2_defconfig
// 使用 dtbs 参数单独编译设备树
make ARCH=arm64 -j4 CROSS_COMPILE=aarch64-linux-gnu- dtbs
1
2
3
4
5
2
3
4
5
编译出来的设备树插件在内核源码/arch/arm64/boot/dts/rockchip/overlay/
lubancat-led-overlay.dtbo,将设备树插件传到板卡的 /boot/dtb/overlay/ 目录下,
并在 /boot/uEnv/uEnv.txt 按照格式添加我们的设备树插件,然后重启开发板,那么系统就
会加载我们编译的设备树插件。
三、设备树插件功能宏
C
Device Drivers → Device Tree and Open Firmware support → Device Tree overlays
1
C
CONFIG_OF_OVERLAY=y
1
以及:
C
OVERLAY_FS
OVERLAY_FS_REDIRECT_DIR
OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW
OVERLAY_FS_INDEX
OVERLAY_FS_XINO_AUTO
OVERLAY_FS_METACOPY
1
2
3
4
5
6
2
3
4
5
6
四、configfs
/sys/kernel/config/