Использование нескольких DT

Многие поставщики SoC и ODM поддерживают использование нескольких DT на устройстве, что позволяет использовать один образ для нескольких SKU/конфигураций. В таких случаях загрузчик идентифицирует аппаратное обеспечение и загружает соответствующее DT во время выполнения:

Рис. 1. Наложение нескольких деревьев устройств в загрузчике.

Примечание. Использование нескольких DT не является обязательным.

Настройка

Чтобы добавить в модель DTO поддержку нескольких DT, настройте список основных DT и другой список наложенных DT.

Рис. 2. Реализация DTO во время выполнения для нескольких DT.

Загрузчик должен уметь:

  • Прочитайте идентификатор SoC и выберите соответствующее основное дерево устройств, а затем
  • Считайте идентификатор платы и выберите соответствующий набор деревьев устройств наложения.

Только одно основное ОУ должно быть выбрано для использования во время выполнения. Можно выбрать несколько наложенных ОУ, но они должны быть совместимы с выбранным основным ОУ. Использование нескольких оверлеев может помочь избежать хранения одного оверлея на плату в разделе DTBO и позволить загрузчику определить подмножество необходимых оверлеев на основе идентификатора платы (или, возможно, путем проверки периферийных устройств). Например, для платы A могут потребоваться устройства, добавленные с помощью наложений 1, 3 и 5, а для платы B могут потребоваться устройства, добавленные с помощью наложений 1, 4 и 5.

Разделение

Для создания разделов определите доступное во время выполнения загрузчика и надежное место во флэш-памяти для хранения DTB и DTBO (загрузчик должен иметь возможность найти эти файлы в процессе сопоставления). Имейте в виду, что DTB и DTBO не могут находиться в одном разделе. Если ваши DTB/DTBO находятся в разделе dtb / dtbo , используйте структуру таблицы и формат заголовка, подробно описанные в разделе Формат раздела DTB/DTBO .

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

Бежать:

  1. Определите SoC и загрузите соответствующий .dtb из хранилища в память.
  2. Определите плату и загрузите соответствующий .dtbo из хранилища в память.
  3. .dtb на .dtbo , чтобы получить объединенное DT.
  4. Запустить ядро ​​по адресу памяти объединенного DT.