文章目录
- 12.1. DTBO镜像文件的概述
- 12.2. DTBO镜像文件的创建
- 12.3. DTBO镜像文件的使用
- 12.4. DTBO镜像文件的示例
12.1. DTBO镜像文件的概述
DTBO镜像文件,全称为“Device Tree Binary Overlay”,即设备树二进制叠加层。该文件是Android Pie中在硬件兼容性方面的重大变化,它可以将设备树中的参数动态加载而不需要重新编译内核。它充分利用了设备树的优点与灵活性,避免了修改设备树的不必要麻烦,同时又不失灵活性,并且在内存使用上相比Device Tree Blob(DTB)更为优秀。
12.2. DTBO镜像文件的创建
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。
12.3. DTBO镜像文件的使用
DTBO镜像文件被作为叠加层加载时,将会在系统启动之后被加载。主要有两种方式加载:
- 加载一个全新的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
12.4. DTBO镜像文件的示例
下面是一个简单的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
>;
};
};