DTBO使用参考
1. 背景¶
该文档基于SigmaStar DTB overlay功能,如需了解该功能可以先阅读文档《SSU_DTBO功能介绍》进行了解。该文档会以pioneer5平台上padmux dtbo的使用作为例子,大致介绍截至到本文的完成前SigmaStar DTB overlay功能如何去配置使用。
2. 配置架构¶
2.1. 设备树dtb配置¶
对于Pioneer5平台,目前我们有三种规格的开发板,分别是:
BGA 16x16 EVB board:SSC028A-S01A-S
BGA 16x16 DEMO board:SSZ028A-S01A-M
BGA 19x19 EVB board:SSC028B-S01A-S
在目前P5 AOSP Kernel中,这些开发板编译Kernel时都使用的是同一个dts:
arch/arm64/boot/dts/sstar/pioneer5-android.dts
按照目前的设计,我们在"pioneer5-android.dts"中包含了:所有开发板公共的设定 + SSC028A-S01A-S开发板特有的设定,形如:
由上图不难看出,通用的设定都已经写在了"pioneer5.dtsi"和"pioneer5-android.dts"正文中,并通过导入"pioneer5-ssc028a-s01a-s-padmux.dtsi"和"pioneer5-ssc028a-s01a-s-panel.dtsi" 使编译出来的"pioneer5-android.dtb"默认支持BGA 16x16 EVB board。
2.2. 叠加设备树配置¶
对于Pioneer5平台,其编译dtbo.img使用的配置文件在:
dtbo/pioneer5.json
其内容大致如下:
// dtbo/pioneer5.json { "entries": { "dtbo_1": { "dts":"dtbo/pioneer5-ssz028a-s01a-m.dts" }, "dtbo_2": { "dts":"dtbo/pioneer5-ssc028b-s01a-s.dts" }, "dtbo_3": { "dts":"dtbo/panel-SAT070AT50H18BH.dts" }, ..... "dtbo_8": { "dts":"dtbo/panel-M270HVN02.dts" }, "dtbo_9": { "dts":"dtbo/panel-DV150X0M.dts" } } }
按照目前的设计,因为pioneer5-android.dts默认支持SSC028A-S01A-S,对于SSZ028A-S01A-M和SSC028B-S01A-S分别有pioneer5-ssz028a-s01a-m.dts和pioneer5-ssc028b-s01a-s.dts用于描述他们与SSC028A-S01A-S的配置差异。
以pioneer5-ssz028a-s01a-m.dts为例,因为SSZ028A-S01A-M的padmux配置和SSC028A-S01A-S有所差异,于是有:
// dtbo/pioneer5-ssz028a-s01a-m.dts /* The DTBO setting of SSZ028A-S01A-M board */ /dts-v1/; /plugin/; #include "../drivers/sstar/include/pioneer5/padmux.h" #include "../drivers/sstar/include/pioneer5/gpio.h" #include "../drivers/sstar/include/mdrv_puse.h" / { compatible = "sstar_dtbo,ssz028a_s01a_m"; }; &padmux { compatible = "sstar,padmux"; schematic = // SDMMC0 <PAD_I2C0_SDA PINMUX_FOR_I2C0_MODE_1 MDRV_PUSE_I2C0_SDA>, <PAD_I2C0_SCL PINMUX_FOR_I2C0_MODE_1 MDRV_PUSE_I2C0_SCL>, <PAD_I2C1_SDA PINMUX_FOR_I2C1_MODE_1 MDRV_PUSE_I2C1_SDA>, <PAD_I2C1_SCL PINMUX_FOR_I2C1_MODE_1 MDRV_PUSE_I2C1_SCL>, // I2C5 for touch panel <PAD_I2C5_SCL PINMUX_FOR_I2C5_MODE_1 MDRV_PUSE_I2C5_SCL>, <PAD_I2C5_SDA PINMUX_FOR_I2C5_MODE_1 MDRV_PUSE_I2C5_SDA>, +-- 54 lines: TTL24-------------------------------------------------------------------------------------------------------------------------------------------------------------------- // DMIC <PAD_SR_PDN1 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC2_CLK>, <PAD_SR_MCLK1 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC2_D0>, <PAD_SR_RST1 PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC2_D1>, <PAD_I2C1_SDA PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC2_D2>, <PAD_I2C1_SCL PINMUX_FOR_DMIC_8CH_MODE_2 MDRV_PUSE_DMIC2_D3>, // SPDIF <PAD_SPDIF_TX PINMUX_FOR_SPDIF_MODE_1 MDRV_PUSE_AIO_SPDIF_TX>, <GPIO_NR PINMUX_FOR_UNKNOWN_MODE MDRV_PUSE_NA>; status = "ok"; };
3. 验证DTB Overlay¶
3.1 U-boot dtbo overlay¶
将dtbo.img编译出来烧录到开发板后,按照《SigmaStar DTB overlay功能介绍》需要打开相关的U-boot Kconfig启动DTB Overlay功能并将pioneer5-ssz028a-s01a-m.dtbo的/compatible属性"sstar_dtbo,ssz028a_s01a_m"添加到U-boot的环境变量"uboot_dtbo_list"中命令形如:
env set uboot_dtbo_list ' sstar_dtbo,ssz028a_s01a_m; env save
U-boot启动过程中会出现如下log:
U-Boot 2021.10 (Dec 13 2022 - 15:04:07 +0800) SoC: SigmaStar pioneer5 Model: PIONEER5 Version: P5##gb9e34cd DRAM: 256 MiB Info: Load env from raw partition env Info: Uboot dtb overlay success
可以通过U-boot环境变量fdtcontroladdr
获取到U-boot dtb在内存中的位置后,使用fdt命令查看overlay前后差异。
3.2 Kernel dtbo overlay¶
将dtbo.img编译出来烧录到开发板后,按照《SigmaStar DTB overlay功能介绍》需要打开相关的U-boot Kconfig启动DTB Overlay功能并将pioneer5-ssz028a-s01a-m.dtbo的/compatible属性"sstar_dtbo,ssz028a_s01a_m"添加到U-boot的环境变量"kernel_dtbo_list"中命令形如:
env set kernel_dtbo_list ' sstar_dtbo,ssz028a_s01a_m; env save
启动Kernel过程中会出现如下log:
Booting kernel at 0x20200000 with fdt at 24000000 ramdisk 0x25000000:0x00d05d0a... Uncompressing Kernel Image ## Flattened Device Tree blob at 24000000 Booting using the fdt blob at 0x24000000 Info: kernel address offset 0xfe0000000 Info: Kernel dtb overlay success Using Device Tree in place at 0000001004000000, end 000000100401b265
可以查看节点:
od -t x4 -w 12 /proc/device-tree/soc/padmux/schematic
对比DTB overlay前后的内容查看效果。