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