Реализация DTO включает в себя разделение дерева устройств, сборку, разбиение на разделы и запуск. После того, как у вас будет работающая реализация, вы также должны поддерживать совместимость между двумя DT и определить стратегию обеспечения безопасности каждого раздела DT.
Разделение ДТ
Начните с разделения дерева устройств на две (2) части:
- Основной ДТ . Часть, предназначенная только для SoC, и конфигурации по умолчанию, предоставленные поставщиком SoC.
- Наложение ДТ . Конфигурации для конкретных устройств, предоставляемые ODM/OEM.
После разделения деревьев устройств необходимо обеспечить совместимость между основным ОУ и оверлейным ОУ, чтобы объединение основного ОУ и оверлейного ОУ привело к полному ОУ для устройства. Дополнительные сведения о формате и правилах DTO см. в разделе Синтаксис DTO . Дополнительные сведения о нескольких деревьях устройств см. в разделе Несколько DT .
Построение основного и наложенного ДТ
Чтобы построить основное ТД:
- Скомпилируйте основной DT
.dts
в файл.dtb
. - Запишите файл
.dtb
в раздел, доступный во время выполнения загрузчика (подробнее см. ниже).
Чтобы построить оверлейное ОУ:
- Скомпилируйте оверлей DT
.dts
в файл.dtbo
. Хотя формат этого файла такой же, как у файла.dtb
, отформатированного как сведенное дерево устройств, другое расширение файла отличает его от основного DT. - Запишите файл
.dtbo
в раздел, доступный во время выполнения загрузчика (как описано ниже).
Дополнительные сведения о компиляции с помощью DTC и проверке результатов DTO на хосте см. в разделе Компиляция и проверка .
Разделение DT
Определите доступное во время выполнения загрузчика и надежное место во флэш-памяти для размещения .dtb
и .dtbo
.
Примеры расположения основного ОУ:
- Часть загрузочного раздела, добавленная к ядру (
image.gz
). - Отдельные большие двоичные объекты DT (
.dtb
) в выделенном разделе (dtb
).
Примеры расположения наложения ОУ:
Уникальный раздел |
---|
ODM-раздел |
---|
.dtbo
в раздел odm
(делайте это, только если ваш загрузчик может загружать данные из файловой системы раздела odm
).Примечание . Размер оверлейного раздела DT зависит от устройства и количества изменений, необходимых поверх основного большого двоичного объекта DT. Как правило, 8 МБ более чем достаточно, и при необходимости можно увеличить пространство в будущем.
Для устройств, поддерживающих бесшовные (A/B) обновления , A/B основных разделов DT и наложенных DT:
Пример 1 |
---|
Пример 2 |
---|
Запуск в загрузчике
Бежать:
- Загрузите
.dtb
из хранилища в память. - Загрузите
.dtbo
из хранилища в память. -
.dtb
на.dtbo
, чтобы получить объединенное DT. - Запустить ядро по адресу памяти объединенного 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
).
Подробнее см. в разделе «Проверенная загрузка ».