Реализация наложений дерева устройств (DTO) включает в себя разделение дерева устройств (DT), его построение, разбиение на разделы и запуск. После создания работоспособной реализации необходимо также обеспечить совместимость между двумя деревьями устройств и определить стратегию обеспечения безопасности каждого раздела дерева устройств.
Разделите DT
Для начала разделите дифференциальное и интегральное моделирование на две части:
- Основной DT . Часть, относящаяся только к SoC, и конфигурации по умолчанию, предоставленные производителем SoC.
- Overlay DT . Конфигурации, специфичные для устройства, предоставляемые ODM/OEM.
После разделения DTO необходимо обеспечить совместимость между основным DTO и наложенным DTO таким образом, чтобы объединение основного DTO и наложенного DTO приводило к созданию полного DTO для устройства. Подробную информацию о формате и правилах DTO см. в разделе «Синтаксис DTO» . Подробную информацию о работе с несколькими DTO см. в разделе «Использование нескольких DTO» .
Создайте основной и наложенный блоки данных.
Для создания основного дерева решений:
- Скомпилируйте основной файл DT
.dtsв файл.dtb. - Прошейте файл
.dtbв раздел, доступный для среды выполнения загрузчика (подробности в [Разделы DT](#partition)).
Для создания наложенного DT:
- Скомпилируйте файл DT с наложением
.dtsв файл.dtbo. Хотя этот формат файла идентичен файлу.dtb, отформатированному как сглаженный DT, другое расширение файла отличает его от основного DT. - Прошейте файл
.dtboв раздел, доступный для среды выполнения загрузчика (подробности в [Разделы DT](#partition)).
Подробную информацию о компиляции с использованием DTC и проверке результатов DTO на хосте см. в разделе «Компиляция и проверка» .
Разделение DTs
Определите доступное для среды выполнения загрузчика и надежное место во флэш-памяти для размещения файлов .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 в наложении. Например, имя раздела, формат хранилища.
Обеспечьте безопасность
Загрузчик должен гарантировать, что DTB или DTBO являются безопасными, неизмененными и неповрежденными. Для защиты DTB или DTBO можно использовать любое решение, например, подпись образа загрузки в VBoot 1.0 или хэш-футер AVB (VBoot 2.0).
- Если DTB или DTBO находятся в уникальном разделе, вы можете добавить этот раздел в цепочку доверия AVB. Цепочка доверия начинается с аппаратно защищенного корня доверия и доходит до загрузчика, который проверяет целостность и подлинность раздела DTB или DTBO.
- Если DTB или DTBO находятся в существующем разделе (например, в разделе
odm), этот раздел должен быть в цепочке доверия AVB. (Раздел DTBO может использовать общий открытый ключ с разделомodm).
Для получения более подробной информации см. раздел «Проверенная загрузка» .