Реализация DTO

Реализация наложений дерева устройств (DTO) включает в себя разделение дерева устройств (DT), построение, разбиение на разделы и запуск. После того, как у вас будет рабочая реализация, вы также должны поддерживать совместимость между двумя DT и определить стратегию обеспечения безопасности каждого раздела DT.

Разделите DT

Начнем с разделения DT на две части:

  • Основной DT . Часть, относящаяся только к SoC, и конфигурации по умолчанию, предоставляемые поставщиком SoC.
  • Overlay DT . Конфигурации, специфичные для устройства, предоставляемые ODM/OEM.

После разделения DT необходимо обеспечить совместимость между основным DT и оверлейным DT, чтобы объединение основного DT и оверлейного DT привело к созданию полного DT для устройства. Подробнее о формате и правилах DTO см. в разделе Синтаксис DTO . Подробнее о нескольких DT см. в разделе Использование нескольких DT .

Создание основных и оверлейных DT

Для построения основного DT:

  1. Скомпилируйте основной DT .dts в файл .dtb .
  2. Прошейте файл .dtb в раздел, доступный во время выполнения загрузчика (подробнее см. в [Partition DTs](#partition)).

Для построения наложения DT:

  1. Скомпилируйте оверлей DT .dts в файл .dtbo . Хотя этот формат файла такой же, как файл .dtb , отформатированный как сглаженный DT, другое расширение файла отличает его от основного DT.
  2. Прошейте файл .dtbo в раздел, доступный во время выполнения загрузчика (подробнее см. в [Partition DTs](#partition)).

Подробную информацию о компиляции с помощью DTC и проверке результатов DTO на хосте см. в разделе Компиляция и проверка .

Раздел DT

Определите доступное для среды выполнения загрузчика и надежное место во флэш-памяти для размещения .dtb и .dtbo .

Примеры расположения основного ДТ:

  • Часть загрузочного раздела, добавленная к ядру ( image.gz )
  • Отдельные DT-блобы ( .dtb ) в выделенном разделе ( dtb )

Примеры мест для наложения DT:

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

Рисунок 2. Поместите .dtbo в уникальный раздел, например, раздел dtbo.

Примечание: Размер раздела overlay DT зависит от устройства и количества изменений, необходимых поверх основного DT blob. Обычно 8 МБ более чем достаточно и позволяет увеличить пространство в будущем, если потребуется.

Для устройств, поддерживающих бесшовные (A/B) обновления , A/B основной DT и оверлейный DT разделы:

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

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

Запустить в загрузчике

Для запуска:

Рисунок 5. Типичная реализация DTO в загрузчике.

  1. Загрузить .dtb из хранилища в память.
  2. Загрузите .dtbo из хранилища в память.
  3. Наложите .dtb на .dtbo , чтобы получить объединенный DT.
  4. Запустить ядро, указав адрес памяти объединенного DT.

Поддерживать совместимость

Основной DTB (от поставщика SoC) рассматривается как API-поверхность для DTBO. После разделения DT на общую часть SoC и часть, специфичную для устройства, необходимо поддерживать взаимосовместимость этих двух частей в будущем, включая:

  • Определение DT в основном DT. Например, узлы, свойства, метки. Любое изменение определения в основном DT может вызвать изменения в оверлейном DT. Например, чтобы исправить имя узла в основном DT, определите метку «псевдоним», которая сопоставляется с исходным именем узла (чтобы избежать изменения оверлейного DT).
  • Расположение хранилища Overlay DT. Например, имя раздела, формат хранилища.

Обеспечить безопасность

Загрузчик должен гарантировать, что DTB или DTBO защищены, не изменены и не повреждены. Вы можете использовать любое решение для защиты DTB или DTBO, например, подпись образа загрузки в VBoot 1.0 или нижний колонтитул AVB HASH (VBoot 2.0).

  • Если DTB или DTBO находится в уникальном разделе, вы можете добавить этот раздел в цепочку доверия AVB. Цепочка доверия начинается с аппаратно защищенного корня доверия и идет к загрузчику, который проверяет целостность и подлинность раздела DTB или DTBO.
  • Если DTB или DTBO находится в существующем разделе (например, в разделе odm ), этот раздел должен быть в цепочке доверия AVB. (Раздел DTBO может иметь общий открытый ключ с разделом odm ).

Подробную информацию см. в разделе Проверенная загрузка .