赞
踩
DTBO镜像文件,全称为“Device Tree Binary Overlay”,即设备树二进制叠加层。该文件是Android Pie中在硬件兼容性方面的重大变化,它可以将设备树中的参数动态加载而不需要重新编译内核。它充分利用了设备树的优点与灵活性,避免了修改设备树的不必要麻烦,同时又不失灵活性,并且在内存使用上相比Device Tree Blob(DTB)更为优秀。
DTBO镜像文件的创建需要使用device tree compiler(DTC),这是一个Linux内核源代码中的模块。具体步骤如下:
1. 编写DTBO源文件,例如example.dts;
2. 将DTBO源文件编译成DTBO文件,例如example.dtbo:dtc -I dts -O dtb -o example.dtbo example.dts
这些命令将创建一个二进制DTBO文件,称为“example.dtbo”。这个文件现在可以被用来替换包中的一个现存DTBO文件,或者用作“叠加层”来修改正在使用的DTB。
DTBO镜像文件被作为叠加层加载时,将会在系统启动之后被加载。主要有两种方式加载:
1. 使用adb将DTBO镜像文件传输到设备上;
2. 在设备上的/system/etc/device-tree/overlay/ 目录下新建一个目录,并将DTBO文件移入此目录中;
3. 将overlay目录名添加到 /system/etc/device-tree/overlay/overlay.dtbo 的末尾(或创建一个新的文件包含所有的overlay文件名),即:
overlay-user
4. 在终端执行如下命令,使叠加层生效:
echo overlay-user.dtbo > /sys/kernel/config/device-tree/overlays/0/status
上述命令将 /system/etc/device-tree/overlay/overlay-user.dtbo 文件加载至默认设备树(即 /boot/dt.img)中。
2 . 更改一个现存的DTB文件。
在这种情况下,DTBO会修改默认设备树以添加额外的数据,例如一些新的节点或者属性。更改现有DTB文件的方法如下:
1. 使用adb将DTBO镜像文件传输到设备上;
2. 直接将DTBO文件加载到DTB文件上:
cat example.dtbo >> /sys/firmware/fdt
下面是一个简单的DTBO文件示例,该文件用于添加一个新的设备树节点:
/dts-v1/; /plugin/; #include <dt-bindings/gpio/gpio.h> #include "../imx6ul-pinfunc.h" /* W1(DS18B20) on 40Pin Header Pin#7 (GPIO1_IO18) */ &w1 { compatible = "ds18b20-gpio"; status = "okay"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_w1>; w1-gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>; }; &iomuxc { pinctrl_w1: w1grp { fsl,pins = < MX6UL_PAD_UART1_CTS_B__GPIO1_IO18 0x110b0 >; }; };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。