Реализация наложений дерева устройств (DTO) включает в себя разделение дерева устройств (DT), его сборку, разбиение на разделы и запуск. После создания работающей реализации необходимо также поддерживать совместимость между двумя DT и определить стратегию обеспечения безопасности каждого раздела DT.
Разделите DT
Начнем с деления DT на две части:
- Основной DT . Часть, предназначенная только для SoC, и конфигурации по умолчанию, предоставляемые поставщиком SoC.
- Наложение DT . Конфигурации, специфичные для устройства, предоставляемые ODM/OEM.
После разделения DT необходимо обеспечить совместимость основного DT и оверлейного DT, чтобы объединение основного DT и оверлейного DT приводило к созданию полного DT для устройства. Подробнее о формате и правилах DTO см. в разделе «Синтаксис DTO» . Подробнее о нескольких DT см. в разделе «Использование нескольких DT» .
Создание основных и оверлейных DT
Для построения основного DT:
- Скомпилируйте основной DT
.dtsв файл.dtb. - Прошейте файл
.dtbв раздел, доступный во время выполнения загрузчика (подробно описано в [Partition DTs](#partition)).
Чтобы построить наложенный DT:
- Скомпилируйте оверлейный DT
.dtsв файл.dtbo. Хотя этот формат файла совпадает с форматом.dtb, отформатированным как сжатый DT, другое расширение файла отличает его от основного DT. - Прошейте файл
.dtboв раздел, доступный во время выполнения загрузчика (подробно описано в [Partition DTs](#partition)).
Подробную информацию о компиляции с помощью DTC и проверке результатов DTO на хосте см. в разделе Компиляция и проверка .
Раздел DT
Определите доступное для среды выполнения загрузчика и надежное место во флэш-памяти для размещения файлов .dtb и .dtbo .
Примеры мест расположения основного ДТ:
- Часть загрузочного раздела, добавленная к ядру (
image.gz) - Отдельные DT-блоки (
.dtb) в выделенном разделе (dtb)
Примеры мест расположения наложенного DT:

Рисунок 1. Поместите .dtbo в раздел ODM (делайте это только в том случае, если ваш загрузчик имеет возможность загружать данные из файловой системы раздела ODM).

Рисунок 2. Поместите .dtbo в уникальный раздел, например, раздел dtbo.
Примечание: Размер раздела оверлейного DT-файла зависит от устройства и объёма изменений, необходимых для основного DT-файла. Как правило, 8 МБ более чем достаточно и позволяет увеличить его при необходимости.
Для устройств, поддерживающих бесшовные обновления (A/B) , A/B — основной раздел DT и раздел наложенного DT:

Рисунок 3. Раздел DTBO A/B, пример 1.

Рисунок 4. Раздел DTBO A/B, пример 2.
Запустить в загрузчике
Для запуска:

Рисунок 5. Типичная реализация DTO в загрузчике.
- Загрузить
.dtbиз хранилища в память. - Загрузить
.dtboиз хранилища в память. - Наложить
.dtbна.dtbo, чтобы получить объединенный DT. - Запустить ядро, указав адрес памяти объединенного DT.
Поддерживать совместимость
Основная база данных (DTB) (от поставщика SoC) рассматривается как API-интерфейс для DTBO. После разделения DT на общую для SoC часть и часть, специфичную для устройства, необходимо обеспечить совместимость этих двух частей в будущем, включая:
- Определение DT в основном DT. Например, узлы, свойства, метки. Любое изменение определения в основном DT может привести к изменениям в оверлейном DT. Например, чтобы исправить имя узла в основном DT, определите метку-псевдоним, которая будет соответствовать исходному имени узла (чтобы избежать изменения оверлейного DT).
- Расположение хранилища оверлейных данных. Например, имя раздела, формат хранилища.
Обеспечить безопасность
Загрузчик должен гарантировать безопасность, отсутствие изменений и повреждений DTB или DTBO. Для защиты DTB или DTBO можно использовать любое решение, например, подпись загрузочного образа в VBoot 1.0 или нижний колонтитул AVB HASH (VBoot 2.0).
- Если DTB или DTBO находится в уникальном разделе, вы можете добавить этот раздел в цепочку доверия AVB. Цепочка доверия начинается с аппаратно защищённого корня доверия и доходит до загрузчика, который проверяет целостность и подлинность раздела DTB или DTBO.
- Если DTB или DTBO находится в существующем разделе (например, разделе
odm), этот раздел должен быть в цепочке доверия AVB. (Раздел DTBO может иметь общий открытый ключ с разделомodm).
Подробную информацию см. в разделе Проверенная загрузка .