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

.dtbo
в уникальный раздел, например раздел dtbo
. Раздел ODM |
---|

.dtbo
в раздел odm
(делайте это, только если ваш загрузчик имеет возможность загружать данные из файловой системы раздела odm
).Примечание . Размер оверлейного раздела DT зависит от устройства и количества изменений, необходимых для основного большого двоичного объекта DT. Как правило, 8 МБ более чем достаточно, и при необходимости можно увеличить объем памяти в будущем.
Для устройств, поддерживающих бесшовное (A / B) обновление , разделы A / B основного DT и оверлейного DT:
Пример 1 |
---|

Пример 2 |
---|

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

- Загрузите
.dtb
из хранилища в память. - Загрузите
.dtbo
из хранилища в память. -
.dtb
.dtbo
на.dtbo
чтобы.dtbo
объединенное DT. - Запустить ядро по адресу памяти объединенного 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
).
Дополнительные сведения см. В разделе «Подтвержденная загрузка» .