Как реализовать объекты передачи данных

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

Разделите ПД

Разделите DT на две части:

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

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

Как создавать основные и наложенные таблицы данных

Чтобы создать основное ДУ, выполните следующие действия:

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

Чтобы создать наложенный DT:

  1. Скомпилируйте оверлейное ДУ .dts в файл .dtbo. Формат этого файла такой же, как у файла .dtb, отформатированного как плоское ДУ, но другое расширение отличает его от основного ДУ.
  2. Загрузите файл .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 во время выполнения в загрузчике

  1. Загрузите .dtb из хранилища в память.
  2. Загрузите .dtbo из хранилища в память.
  3. Наложите .dtb на .dtbo, чтобы получить объединенное ДУ.
  4. Запустить ядро, используя адрес памяти объединенного 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).

Подробнее о проверке при запуске…