Внедрение DTO

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

Разделение ДТ

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

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

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

Построение основного и наложенного ДТ

Чтобы построить основное ТД:

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

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

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

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

Разделение DT

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

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

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

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

Уникальный раздел
Рисунок 1. Поместите .dtbo в уникальный раздел, например, в раздел dtbo .
ODM-раздел
Рисунок 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 , чтобы получить объединенное DT.
  4. Запустить ядро ​​по адресу памяти объединенного DT.

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

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

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

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

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

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

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