Оверлеи (наложения) дерева устройств Здесь даются общие сведения об оверлеях дерева устройств, а также приводится информация об оверлее для OpiZero2, входящем в стоковую прошивку Андроид. В составе образа прошивки Android 10 для OpiZero2 имеется файл boot-package.fex. [254][mmc]: ***Try SD card 0*** [263][mmc]: HSSDR52/SDR25 4 bit [267][mmc]: 50000000 Hz [269][mmc]: 30500 MB [271][mmc]: ***SD/MMC 0 init OK!!!*** [370]Loading boot-pkg Succeed(index=0). [374]Entry_name = u-boot [383]Entry_name = monitor [387]Entry_name = dtbo [390]Entry_name = dtb [393]Jump to second Boot. После распаковки файла boot-package.fex можно получить четыре бинарных файла (расширение .pak взято совершенно условно): Файл dtbo.pak - это и есть бинарный оверлей дерева устройств OpiZero2. В этом бинарном файле как и в основном FDT есть Блок строк и Блок структуры Если декомпилировать под Linux этот бинарный файл при помощи утилиты fdtdump , то получим текстовый файл: dtbo.dts , анализ которого показывает, что в нем содержится два фрагмента 'fragment@1' и 'fragment@2'. Оверлей 'fragment@2' длелает значение свойства cpu-supply = 0. Оверлей 'fragment@1' корректирует значения свойств узла pmu, который описывает параметры контроллера питания axp806. Ниже приведены выдержки из некоторых источников, имеющих отношение к оверлеям DT Использование оверлеев в U-BootВыясните, где разместить как BLOB-объект дерева базового устройства, так и оверлей. Убедитесь, что у вас достаточно места, чтобы вырастить базовое дерево, ничего не перекрывая. => setenv fdtaddr 0x87f00000 => setenv fdtovaddr 0x87fc0000 Загрузите базовое двоичное дерево устройств и оверлей двоичного дерева устройств. => load /base.dtb => load /overlay.dtboУстановите базовое двоичное дерево устройств в качестве рабочего дерева fdt. => fdtaddr Увеличьте его так, чтобы он мог охватить все примененные оверлеи=> fdt resize 8192 Теперь можно применить оверлей. => fdt apply Загрузить систему, как и в случае с традиционным dtb. Для bootm:=> bootm -Для bootz: => bootz - Обратите внимание, что в случае ошибки и база, и наложения будут признаны недействительными, поэтому сохраните копии, чтобы избежать перезагрузки. Источник: Использование оверлеев в U-Boot Примеры оверлеев для ArmbianБольшинство внутрисхемных интерфейсов и интерфейсов на основе GPIO (SPI, I2C, I2S, UART,…) не имеют механизма для обнаружения и идентификации устройств, подключенных к шине, поэтому ядру Linux необходимо явно сообщить об устройстве и деталях его конфигурации. В то время как дерево устройств - это способ описания конфигурации оборудования для ядра, оверлеи дерева устройств - это способ изменения дерева устройств с целью предоставить ядру и драйверам ядра сведения о внешних устройствах или активировать интерфейсы, отключенные по умолчанию. Все неиспользуемые внутрисхемные интерфейсы, которые используют контакты GPIO, должны быть отключены по умолчанию, а все контакты разъемов или контактных площадках будут настроены как стандартные GPIO. Все выделенные интерфейсы, такие как USB, Ethernet или аналоговое аудио, которые подключены к контактным площадкам или контактам разъемов вместо специализированных разъемов (например, разъем USB, разъем Ethernet или разъем 3,5 мм), будут отключены по умолчанию. С примерами оверлеев для Armbian можно позакомиться здесь: Примеры оверлеев на GitHub Android Open Source ProjectВ документах Android Open Source Project приведена следующая информация.Дерево устройств (DT) - это структура данных, состоящая из именованных узлов и свойств, которые описывают не обнаруживаемое оборудование. Операционные системы, такие как ядро Linux, используемое в Android, используют DT для поддержки широкого диапазона аппаратных конфигураций, используемых устройствами на базе Android. Поставщики оборудования предоставляют свои собственные исходные файлы DT, которые затем Linux компилирует в файл Blob дерева устройств (DTB), используемый загрузчиком. Оверлей дерева устройств (DTO) используется для наложения на блоб главного дерева устройств (DTB). Загрузчик, использующий DTO, может поддерживать DT системы на кристалле (SoC) и динамически накладывать DT для конкретного устройства, добавляя узлы в дерево и внося изменения в свойства в существующем дереве. В Android 9 загрузчик не должен изменять свойства, определенные в наложениях дерева устройств, перед передачей блоб (большого двоичного объекта) объединенного дерева устройств в ядро. Загрузка дерева устройств в загрузчик включает сборку, разбиение на разделы и запуск. Источник: Оверлеи дерева устройств |