本文介绍了设备树的概念,包括传统设备树的批量管理硬件资源方式及其局限性,然后详细阐述了"插件"设备树的模块化管理方式,它允许更灵活的硬件资源定制。使用"插件"设备树需要内核配置支持,并通过挂载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