Дерево устройств FDT, используемое в конкретном устройстве (в нашем случае - OrangePi Zero2), не является жестко фиксированным объектом, оно претерпевает некоторые изменения в процессе загрузки и работы операционной системы. В образе прошивки Андроид (файл .img) двоичный FDT хранится в файле sunxi.fex размером 129536 байт. Одновременно в прошивке имеется файл boot-package.fex, представляющий собой упакованный набор файлов, который используется загрузчиком Boot0. [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 образуются 4 файла, два из которых имееют прямое отношение к дереву устройств, это бинарные файлы: dtb и dtbo. При этом файл dtb является точной копией файла sunxi.fex, а файл dtbo (O - overlay) содержит дополнительные данные, используемые для наложения на основное дерево устройств. После старта U-Boot используемое им дерево устройств можно восстановить в исходном формате командой fdtprint. Анализ структуры и содержимого этого дерева показывает, что оно совпадает с содержимым двоичного дерева sunxi.fex (а также dtb из boot-package.fex). После полной загрузки системы используемое дерево устройств отображается в формате файловой системы (папки-файлы) по пути sys/firmware/devicetree/base, а также по пути: proc/device-tree. Анализ папки Base, где входящие подпапки - это узлы дерева, а содержащиеся в них файлы - это свойства, показывает, что в процессе полной загрузки системы в дереве устройств произошли некоторые изменения в свойствах и их значениях, при этом структура узлов практически не изменилась. Проведенный сравнительный анализ первичного дерева устройств (востановленного в U-Boot) и системного дерева (в папке Base), показан на странице: Изменения в дереве устройств . Основные отличия заключаются в следующем: 1. Во все узлы добавлено свойство name, значением которого служит имя самого младшего подузла,
в полном пути узла, усеченное до символа @ (если такой имеется), например: 2. В узле memory@40000000 изменено значение свойства reg: 1 Гбайт 3. В узле chosen свойство bootargs существенно расширено. snum=9c00141511d0481230e mac_addr= wifi_mac=a8:60:37:a1:ce:00 bt_mac= selinux=0 specialstr= gpt=1 androidboot.mode=normal androidboot.serialno=9c00141511d0481230e androidboot.hardware=sun50iw9p1 boot_type=1 androidboot.boot_type=1 androidboot.secure_os_exist=0 gpt=1 uboot_message=2018.05(10/22/2020-17:24:26) disp_reserve=3686400,0x7bf2d880 bootreason=unknow selinux=1 androidboot.selinux=enforcing androidboot.dtbo_idx=0,1,2 buildvariant=eng Примечание. Большинство добавленных значений взяты из переменных окружения (environment). Отметим, что в свойстве bootargs изменилось значение loglevel с 8 на 2, в результате которого существенно сокращается объем передаваемой в терминал отадочной информации. Кроме того, в этом узле Изменения в дереве устройств - полный список
|