Дерево устройств (DT, Device Tree) — это структура данных, состоящая из именованных узлов и атрибутов, используемая для описания необнаружимого (так пишет Google, что означает, что информацию об оборудовании невозможно увидеть) аппаратного обеспечения. Операционные системы, такие как ядро Linux, используемое в Android, используют DT для поддержки различных конфигураций оборудования, используемых устройствами Android. Поставщики оборудования предоставят свои собственные исходные файлы DT, а затем Linux скомпилирует эти файлы в файлы DTB (BLOB дерева устройств), используемые загрузчиком.
Наложение дерева устройств (DTO, наложение дерева устройств) позволяет накладывать основной файл dtb. Загрузчик, использующий DTO, может поддерживать DT системы на кристалле (SoC) и динамически накладывать DT для конкретного устройства, добавляя узлы в дерево и внося изменения в свойства в существующих деревьях. Например, производители чипов, такие как Qualcomm, будут иметь в ядре dts для определенного SOC, описывающего их общедоступную версию информации об оборудовании. Продайте SOC разным производителям мобильных телефонов, таким как Xiaomi, Oppo и т. д., и они напишут dts, то есть dtbo, в своих устройствах, чтобы выполнить собственную персонализированную настройку. Ваш собственный dtbo + dtb Qualcomm образуют окончательное дерево устройств в системе, что позволяет производителям и поставщикам микросхем удобно поддерживать свои собственные деревья устройств.
На этой странице подробно описан типичный рабочий процесс загрузки DT с помощью загрузчика и приведена общая терминология DT.
В Android 9 загрузчик не может изменять атрибуты, определенные в dtbo, перед передачей унифицированного dtb ядру.
Использование дерева устройств в загрузчике требует трех этапов, а именно: создание, разбиение на разделы и запуск, как показано на следующем рисунке:
1.Строить
Используйте dtc для компиляции файлов *.dts дерева устройств в файлы *.dtb. Запишите файл dtb в место, доступное для загрузчика на плате разработки.
2. Раздел
Если вам нужно создать раздел, поместите файл dtb в надежное место, к которому имеет доступ загрузчик, как показано ниже. Слева поместите dtb вместе с ядром в загрузочный раздел, прикрепив его к image.gz и отдав его. как «ядро» передано в mkbootimg. Справа dtb вынесен в отдельный раздел.
3. Бегите
Загрузите .dtb из хранилища (emmc) в память (ddr) Запустить ядро (указав адрес памяти загруженного DT)
Некоторые пояснения к терминологии в этой статье и следующих статьях о dto.
термин | значение |
---|---|
DT | Device Tree |
DTB | Device Tree Blob |
DTBO | Device Tree Blob for Overlay |
DTC | Device Tree Compiler |
DTO | Device Tree Overlay |
DTS | Device Tree Source |
FDT | Flattened Device Tree, a binary format contained in a .dtb blob file |
Реализация DTO включает в себя следующие шаги:
Разделите dt в системе на две части:
Для построения основного ОУ выполните следующие действия:
Чтобы построить наложенное ОУ, выполните следующие действия:
Определите информацию о местоположении во флэш-памяти, к которой загрузчик может получить доступ и которой можно доверять во время выполнения, чтобы разместить .dtb и .dtbo.
Пример расположения главного ОУ:
Примеры позиций для наложенного DT:
Как показано слева, поместите .dtbo в отдельный раздел, например раздел dtbo. Как показано справа, поместите .dtbo в раздел odm (делайте это только в том случае, если ваш загрузчик может загружать данные из файловой системы раздела odm).
Примечание. Размер раздела dtbo зависит от количества изменений, которые необходимо внести в основной dtb. Обычно 8 МБ достаточно.
Для устройств, которые поддерживают бесшовные обновления (A/B), используйте A/B для определения основного раздела DT и наложенного DT:
Для запуска сделайте следующее:
Основным DTB (от поставщика SoC) считается поверхность API DTBO. После разделения дерева устройств на общие части SoC и части, специфичные для устройства, вы должны убедиться, что эти две части совместимы друг с другом в будущем, в том числе:
Загрузчик должен гарантировать, что DTB/DTBO безопасен, не модифицирован и не поврежден. Вы можете использовать любое решение для защиты DTB/DTBO, например, подпись загрузочного образа в VBoot 1.0 или нижний колонтитул AVB HASH (VBoot 2.0).