Реализация DTO

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

Разделение DT

Начните с разделения дерева устройств на две (2) части:

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

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

Создание основного и наложенного ОУ

Чтобы построить основное ОУ:

  1. Скомпилируйте основной DT .dts в файл .dtb .
  2. Запишите файл .dtb в раздел, доступный во время выполнения загрузчика (подробно ниже).

Чтобы построить наложение DT:

  1. Скомпилируйте наложение DT .dts в файл .dtbo . Хотя этот формат файла аналогичен файлу .dtb отформатированному в виде плоского дерева устройств, другое расширение файла отличает его от основного ОУ.
  2. Запишите файл .dtbo в раздел, доступный во время выполнения загрузчика (как описано ниже).

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

Разделение ОУ

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

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

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

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

Уникальный раздел
Рисунок 1. Поместите .dtbo в уникальный раздел, например, в раздел dtbo .
ОДМ-раздел
Рисунок 2. Поместите .dtbo в раздел odm (делайте это только в том случае, если ваш загрузчик имеет возможность загружать данные из файловой системы odm ).

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

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

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

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

Бежать:

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

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

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

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

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

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

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

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