本文介绍了设备树的概念,包括传统设备树的批量管理硬件资源方式及其局限性,然后详细阐述了"插件"设备树的模块化管理方式,它允许更灵活的硬件资源定制。使用"插件"设备树需要内核配置支持,并通过挂载ConfigFS进行管理。以案例展示了如何创建和使用设备树及"插件"设备树,并提供了编译和加载设备树的步骤。此外,还提到了在U-Boot中加载设备树的方法。
批量管理硬件资源,机制僵化
模块化管理硬件资源,灵活定制
mount x /sys/kernel/config -t configfs
/ {
compatible = "corp,foo";
/* On chip peripherals */
ocp: ocp {
/* peripherals that are always instantiated */
peripheral1 { ... };
}
};
/dts-v1/;
/plugin/;
/ {
....
fragment@0
{
target = <&ocp>;
__overlay__
{
bar
{
compatible = "corp,bar";
}
};
};
};
/ {
compatible = "corp,foo";
res: res {
};
ocp: ocp {
peripheral1 { ... };
bar {
compatible = "corp,bar";
}
}
};
./scripts/dtc/dtc -I dts -O dtb -o xxx.dtbo arch/arm/boot/dts/xxx.dts // 编译 dts 为 dtbo
./scripts/dtc/dtc -I dtb -O dts -o xxx.dts arch/arm/boot/dts/xxx.dtbo // 反编译 dtbo 为 dts
sudo apt install device-tree-compiler
mkdir /sys/kernel/config/device-tree/overlays/xxx
echo xxx.dtbo >/sys/kernel/config/device-tree/overlays/xxx/path
或者将dtbo的内容cat到dtbo属性文件
cat xxx.dtbo >/sys/kernel/config/device-tree/overlays/xxx/dtbo
ls /proc/device-tree
rmdir /sys/kernel/config/device-tree/overlays/xxx
修改/boot/uEnv.txt