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

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

Рисунок 1. Несколько наложений дерева устройств (DTO) в загрузчике операционной системы.

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

Настроить

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

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

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

  • Прочитайте идентификатор SoC и выберите соответствующее основное ДУ.
  • Прочитайте идентификатор платы и выберите соответствующий набор наложений DT.

Во время выполнения можно использовать только один основной DT. Можно выбрать несколько накладываемых ДУ, но они должны быть совместимы с основным ДУ. Использование нескольких оверлеев позволяет избежать хранения одного оверлея на плату в разделе 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, чтобы получить объединенное ДУ.
  4. Запустите ядро, указав адрес памяти объединенного дерева устройств.