Реализация наложений дерева устройств (DTO) включает в себя разделение дерева устройств (DT), построение, секционирование и запуск. После того как у вас есть работающая реализация, вы также должны поддерживать совместимость между двумя DT и определить стратегию обеспечения безопасности каждого раздела DT.
Разделите DT
Начните с разделения DT на две части:
- Основное ДТ . Часть, предназначенная только для SoC, и конфигурации по умолчанию, предоставленные поставщиком SoC.
- Наложение ДТ . Конфигурации для конкретного устройства, предоставляемые ODM/OEM.
После разделения ОУ необходимо обеспечить совместимость основного и накладного ОУ, чтобы в результате объединения основного и накладного ОУ получилось полное ОУ для устройства. Подробную информацию о формате и правилах DTO см. в разделе Синтаксис DTO . Подробную информацию о нескольких ОУ см. в разделе Использование нескольких ОУ .
Создайте основные и наложенные ОУ.
Чтобы построить основное ОУ:
- Скомпилируйте основной файл DT
.dts
в файл.dtb
. - Запишите файл
.dtb
в раздел, доступный во время выполнения загрузчика (подробно описано в [Partition DTs](#partition)).
Чтобы построить наложение DT:
- Скомпилируйте наложение DT
.dts
в файл.dtbo
. Хотя этот формат файла аналогичен файлу.dtb
, отформатированному как плоское ОУ, другое расширение файла отличает его от основного ОУ. - Запишите файл
.dtbo
в раздел, доступный во время выполнения загрузчика (подробно см. в [Partition DTs](#partition)).
Подробные сведения о компиляции с помощью DTC и проверке результатов DTO на узле см. в разделе Компиляция и проверка .
ДТ раздела
Определите доступное и надежное место загрузчика во флэш-памяти для размещения .dtb
и .dtbo
.
Примеры расположения основного ОУ:
- Часть загрузочного раздела, добавленная к ядру (
image.gz
) - Отдельные объекты DT (
.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 во время выполнения в загрузчике.
- Загрузите
.dtb
из хранилища в память. - Загрузите
.dtbo
из хранилища в память. - Наложите
.dtb
на.dtbo
, чтобы получить объединенное ОУ. - Запустите ядро по адресу памяти объединенного DT.
Поддерживать совместимость
Основной DTB (от поставщика SoC) рассматривается как поверхность API для DTBO. После разделения ОУ на общую часть SoC и часть, специфичную для устройства, вы должны сохранить обе части взаимно совместимыми в будущем, в том числе:
- Определение DT в основном DT. Например, узлы, свойства, метки. Любое изменение определения в основном ОУ может вызвать изменения в наложенном ОУ. Например, чтобы исправить имя узла в основном ОУ, определите метку «псевдоним», которая соответствует исходному имени узла (чтобы избежать изменения наложенного ОУ).
- Наложение местоположения магазина DT. Например, имя раздела, формат хранилища.
Обеспечьте безопасность
Загрузчик должен гарантировать, что DTB или DTBO безопасны, неизменены и неповреждены. Вы можете использовать любое решение для защиты DTB или DTBO, например, подпись загрузочного образа в VBoot 1.0 или нижний колонтитул AVB HASH (VBoot 2.0).
- Если DTB или DTBO находится в уникальном разделе, вы можете добавить этот раздел в цепочку доверия AVB. Цепочка доверия начинается с аппаратно защищенного корня доверия и переходит к загрузчику, который проверяет целостность и подлинность раздела DTB или DTBO.
- Если DTB или DTBO находится в существующем разделе (например, разделе
odm
), этот раздел должен находиться в цепочке доверия AVB. (Раздел DTBO может использовать общий ключ с разделомodm
).
Подробную информацию см. в разделе «Проверенная загрузка» .