114 Device Tree Overlays:”插件“设备树

本文探讨了传统设备树的局限性和'插件'设备树的模块化优势,介绍了内核配置和使用方式,包括如何加载、编译和管理'插件'DTB。重点展示了通过组合设备树和插件树实现硬件资源的灵活定制案例。
传统设备树

批量管理硬件资源,机制僵化

”插件“设备树

模块化管理硬件资源,灵活定制

使用前提
  • 内核配置

    • CONFIG_OF_OVERLAY = y
    • CONFIG_OF_CONFIGFS = y
  • 挂载ConfigFS

    mount x /sys/kernel/config -t configfs
    
案例说明
设备树:foo.dts
	/ {
		compatible = "corp,foo";
		
		/* On chip peripherals */
		ocp: ocp {
			/* peripherals that are always instantiated */
			peripheral1 { ... };
		}
	};

“插件”设备树:bar.dts
/dts-v1/;
/plugin/;
/ {
	....	
	fragment@0 {
		target = <&ocp>;
		__overlay__ {
			/* bar peripheral */
			bar {
				compatible = "corp,bar";
				... /* various properties and child nodes */
			}
		};
	};
};
  • /dts-v1/ :指定dts版本号

  • /plugin/:允许设备树中引用未定义的节点

  • target = <&xxx>:指定"插件"设备树的父节点

  • target-path = “xxx”:指定"插件"设备树的父节点路径

设备树+“插件设备树”:foo.dts + bar.dts
/ {
		compatible = "corp,foo";

		/* shared resources */
		res: res {
		};

		/* On chip peripherals */
		ocp: ocp {
			/* peripherals that are always instantiated */
			peripheral1 { ... };

			/* bar peripheral */
			bar {
				compatible = "corp,bar";
				... /* various properties and child nodes */
			}
		}
	};
编译方式
./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
APT下载dtc工具
sudo apt install device-tree-compiler
使用方式
内核运行状态加载(通用)
  1. 在/sys/kernel/config/device-tree/overlays/下创建一个新目录:

    mkdir /sys/kernel/config/device-tree/overlays/xxx
    
  2. 将dtbo固件echo到path属性文件中

    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
    
  3. 节点将被创建,查看内核设备树

    ls /proc/device-tree
    
  4. 删除"插件"设备树

    rmdir /sys/kernel/config/device-tree/overlays/xxx
    
uboot加载(野火linux开发板)

修改/boot/uEnv.txt

在嵌入式Linux下,设备树device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为二进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成二进制文件:hello.dtb,然后重新启动内核,重新解析。有了设备树的overlay功能,省去了设备树的重新编译和内核重启,我们可以直接编写一个设备树插件:overlay.dts,编译成overlay.dtbo后,直接给设备树“打补丁”,在运行期间就可以动态添加节点、修改节点...设备树的overlay功能,在很多场合都会用得到,会让我们的开发更加方便:外界插拔设备,无法在设备树中预先描述:耳机树莓派 + FPGA开发板基于I2C的温度传感器管脚的重新配置:PIN multiplexing修改bootcmd、分区...设备树的overlay功能,目前还没有加入到内核mainline(linux-5.10.x),但目前有些开发板和配套的BSP已经支持了,支持在系统运行期间动态修改设备树文件。如果你手头的开发板或内核平台还没有支持device tree overlay,可以学习本期课程,学习内核中设备树overlay的实现原理,如何给内核打补丁,使内核支持设备树的overlay功能。有了本期课程的学习基础,明白了设备树overlay的实现原理和运行机制,你就可以尝试在自己的开发板平台上实现这个功能了。本期课程的主要内容如下:在开发板上如何实现设备树的overlay功能Configfs文件系统的配置与挂载Configfs编程接口如何编写设备树 overlay插件设备树 overlay的编译和运行设备树overlay运行机制分析本期课程适合哪些人学习:嵌入式驱动工程师嵌入式BSP工程师嵌入式软件工程师想从事嵌入式开发的同学全网首家讲解设备树overlay的视频教程。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值