Android dtbo(1) введение в dto
Android dtbo(1) введение в dto

Дерево устройств (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.

1. Обновление Android9

В Android 9 загрузчик не может изменять атрибуты, определенные в dtbo, перед передачей унифицированного dtb ядру.

1.1 Загрузка дерева устройств

Использование дерева устройств в загрузчике требует трех этапов, а именно: создание, разбиение на разделы и запуск, как показано на следующем рисунке:

1.Строить

Используйте dtc для компиляции файлов *.dts дерева устройств в файлы *.dtb. Запишите файл dtb в место, доступное для загрузчика на плате разработки.

2. Раздел

Если вам нужно создать раздел, поместите файл dtb в надежное место, к которому имеет доступ загрузчик, как показано ниже. Слева поместите dtb вместе с ядром в загрузочный раздел, прикрепив его к image.gz и отдав его. как «ядро» передано в mkbootimg. Справа dtb вынесен в отдельный раздел.

3. Бегите

Загрузите .dtb из хранилища (emmc) в память (ddr) Запустить ядро ​​(указав адрес памяти загруженного DT)

2. Терминология

Некоторые пояснения к терминологии в этой статье и следующих статьях о 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

3. Внедрить DTO

Реализация DTO включает в себя следующие шаги:

  1. Разделить дерево устройств
  2. Строить
  3. Раздел
  4. бегать В то же время необходимо поддерживать совместимость между двумя ОУ и определить стратегию обеспечения безопасности двух разделов.

3.1 Разделение DT

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

  • Основное ОУ: Обычно в ядре, предоставляемое производителем SOC, включая конфигурацию SOC по умолчанию.
  • Наложение DT: предоставляется ODM/OEM, обычно размещается в устройстве и содержит конкретную конфигурацию определенного устройства.

3.2 Построение основного ОУ и наложенного ОУ

Для построения основного ОУ выполните следующие действия:

  1. Скомпилируйте .dts основного DT в файл .dtb.
  2. Запишите файл .dtb в раздел, доступный загрузчику во время выполнения.

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

  1. Компилирует наложение DT .dts в файлы .dtbo. Хотя этот формат файла аналогичен файлу .dtb, отформатированному в виде плоского дерева устройств, может использоваться другое расширение файла.
  2. Отличить его от основного ДТ.
  3. Воля .dtbo Файл прошивается в программу загрузчика и доступен при запуске из Раздел.

3.3 Раздел ДТ

Определите информацию о местоположении во флэш-памяти, к которой загрузчик может получить доступ и которой можно доверять во время выполнения, чтобы разместить .dtb и .dtbo.

Пример расположения главного ОУ:

  • В составе загрузочного раздела, прикрепленного к ядру (image.gz).
  • Отдельный большой двоичный объект DT (.dtb) в выделенном разделе (dtb).

Примеры позиций для наложенного DT:

Как показано слева, поместите .dtbo в отдельный раздел, например раздел dtbo. Как показано справа, поместите .dtbo в раздел odm (делайте это только в том случае, если ваш загрузчик может загружать данные из файловой системы раздела odm).

Примечание. Размер раздела dtbo зависит от количества изменений, которые необходимо внести в основной dtb. Обычно 8 МБ достаточно.

Для устройств, которые поддерживают бесшовные обновления (A/B), используйте A/B для определения основного раздела DT и наложенного DT:

3.4 Запуск в загрузчике

Для запуска сделайте следующее:

  1. Воля .dtb Загрузка в память из места хранения.
  2. Воля .dtbo Загрузка в память из места хранения.
  3. Наложите .dtbo на .dtb, чтобы сформировать объединенное ОУ.
  4. Запустить ядро ​​(указав адрес памяти слитого ДТ).

4. Поддерживайте совместимость

Основным DTB (от поставщика SoC) считается поверхность API DTBO. После разделения дерева устройств на общие части SoC и части, специфичные для устройства, вы должны убедиться, что эти две части совместимы друг с другом в будущем, в том числе:

  • Определения ОУ (например, узлы, атрибуты, метки) в основном ОУ. Любые изменения определения в главном ОУ могут вызвать изменения в накладном ОУ. Например, если вам нужно исправить имя узла в основном ОУ, определите метку «псевдоним», которая соответствует исходному имени узла (чтобы избежать изменения наложенного ОУ).
  • Место хранения наложенного ОУ (например, имя раздела, формат хранения).

5. Берегите это

Загрузчик должен гарантировать, что DTB/DTBO безопасен, не модифицирован и не поврежден. Вы можете использовать любое решение для защиты DTB/DTBO, например, подпись загрузочного образа в VBoot 1.0 или нижний колонтитул AVB HASH (VBoot 2.0).

  • если DTB/DTBO Находясь в эксклюзивном из Раздел, вы можете Воля этот Раздел добавить в AVB из Цепочка доверия. цепочка доверия от аппаратного обеспечение защиты из корня доверия запускается и входит в загрузчик, таким образом проверяя DTB/DTBO Целостность и подлинность раздела.
  • если DTB/DTBO Расположен в существующем разделе (например. odm раздел), который должен находиться в AVB в цепочке доверия. (ДТБО Перегородки можно объединять odm Разделы имеют общий открытый ключ).
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]