Android DTO和dtbo简介

在做Android8时,发现在dts中引入了dto。设备树叠加层(DTO)可让主要的设备树(DTB)叠加到设备树上。使用DTO的引导程序可以维护系统芯片(SOC)DT,并动态叠加针对特定设备的DT,从而向树中添加节点并对先用树中的属性进行更改。也就是SOC的设备节点作为DTB,其他设备作为DTO,DTO可以对DTB中的节点进行引用和修改。实现DTO包括分割设备树,编译,分区和运行。

分割DT

首先将设备树分割成两部分:

  • 主DT。由SOC供应商提供的SOC公用部分和默认配置。
  • 叠加DT。由原始设计制造商(ODM)/原始设备制造商(OEM)提供的设备专属配置。

编译主DT和叠加DT

要编译主DT,请执行以下操作:

  1. 将朱.dts编译为.dtb文件。
  2. 将.dtb文件刷写到引导加载程序在运行时可访问的分区。

要编译叠加DT,请执行以下操作:

  1. 将叠加DT .dts编译为.dtbo文件。虽然文件格式与已格式化为扁平化设备树的.dtb文件相同,但是用不同的文件扩展名可以将其与主DT分开来。
  2. 将.dtbo文件刷写到引导加载程序在运行时可访问的分区。

对DT进行分区

在闪存中确定加载程序在运行时可访问和可信的位置以放入.dtb和.dtbo。

朱DT的实例位置:

  • 引导分区的一部分,已附加到内核(image.gz)
  • 单独的DT blob(.dtb),位于专用的(dtb)中。

在引导加载程序中运行

  1. 将 .dtb 从存储加载到内存中
  2. 将 .dtbo 从存储加载到内存中
  3. 用 .dtbo 叠加 .dtb 以形成合并的 DT
  4. 启动内核(已给定合并 DT 的内存地址)

对于包含关系,我们可以从dts目录下的Makefile看到:

dtbo-$(CONFIG_ARCH_SDM429) += sdm429-mtp-overlay.dtbo \
	sdm429-cdp-overlay.dtbo \
	sdm429-qrd-overlay.dtbo \
	sdm429-spyro-qrd-evt-overlay.dtbo \
	sdm429-spyro-qrd-dvt-overlay.dtbo
	
	
sdm429-spyro-qrd-evt-overlay.dtbo-base := sdm429-spyro.dtb
sdm429-spyro-qrd-dvt-overlay.dtbo-base := sdm429-spyro-dvt.dtb

对于SDM429来说,将有5个dtbo,sdm429-spyro-qrd-evt-overlay.dtbo-base这个dtbo依赖于sdm429-spyro.dtb,sdm429-spyro-qrd-dvt-overlay.dtbo-base这个dtbo依赖于sdm429-spyro-dvt.dtb。更具这些dtbo和dtb我们能够追溯到引用的各个dtsi文件。

你可能感兴趣的:(Linux驱动)