Jump to content

Дерево устройств

В вычислительной технике дерево устройств (также называемое деревом устройств ) — это структура данных , описывающая аппаратные компоненты конкретного компьютера, чтобы ​​операционной системы могло ядро использовать и управлять этими компонентами, включая ЦП или ЦП, память , шины и встроенная периферия .

Дерево устройств было получено на основе SPARC компьютеров в рамках проекта Open Firmware . Текущая спецификация Devicetree [1] предназначен для небольших систем, но все еще используется с некоторыми системами серверного класса (например, описанными в Справочнике по платформе Power Architecture ).

Персональные компьютеры с архитектурой x86 обычно не используют деревья устройств, вместо этого полагаясь на различные протоколы автоматической настройки (например, ACPI ) для обнаружения оборудования. Системы, использующие деревья устройств, обычно передают статическое дерево устройств (возможно, хранящееся в EEPROM или хранящееся в устройстве NAND, например eUFS ) в операционную систему, но также могут генерировать дерево устройств на ранних этапах загрузки . Например, Das U-Boot и kexec могут передавать дерево устройств при запуске новой операционной системы. В системах с загрузчиком, не поддерживающим деревья устройств, статическое дерево устройств может быть установлено вместе с операционной системой; ядро Linux поддерживает этот подход.

Спецификацией Devicetree в настоящее время управляет сообщество под названием devicetree.org, которое связано, среди прочего, с Linaro и Arm .

Дерево устройств может содержать любые данные, поскольку внутри оно представляет собой дерево именованных узлов и свойств . Узлы содержат свойства и дочерние узлы, а свойства представляют собой пары имя-значение .

Деревья устройств имеют как двоичный формат для использования операционными системами, так и текстовый формат для удобного редактирования и управления. [1]

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

[ редактировать ]

При правильном дереве устройств одно и то же скомпилированное ядро ​​может поддерживать различные конфигурации оборудования в более широком семействе архитектур. Ядро Linux для архитектур ARC , ARM , C6x , H8/300 , MicroBlaze , MIPS , NDS32, Nios II , OpenRISC , PowerPC , RISC-V , SuperH и Xtensa считывает информацию о дереве устройств; на ARM деревья устройств являются обязательными для всех новых SoC с 2012 года. [2] Это можно рассматривать как средство борьбы с огромным количеством форков (Linux и Das U-Boot), которые исторически создавались для поддержки (незначительно) различных плат ARM. Цель состоит в том, чтобы переместить значительную часть описания оборудования из двоичного файла ядра в скомпилированный объект дерева устройств, который передается ядру загрузчиком , заменяя ряд C исходных файлов для конкретной платы и компилируя его. параметры времени в ядре. [2]

Он указывается в исходном файле дерева устройств (.dts) и компилируется в большой двоичный объект дерева устройств или двоичный файл дерева устройств (.dtb) с помощью компилятора дерева устройств (DTC). Исходные файлы дерева устройств могут включать в себя другие файлы, называемые «включениями исходного дерева устройств». [3] [1]

на базе ARM обычно Дистрибутивы Linux включают загрузчик, который обязательно настраивается для конкретных плат, например Raspberry Pi или Hackberry A10. Это создало проблемы для создателей дистрибутивов Linux, поскольку некоторая часть операционной системы должна быть скомпилирована специально для каждого варианта платы или обновлена ​​для поддержки новых плат. Однако некоторые современные SoC (например, Freescale i.MX6 ) имеют предоставленный поставщиком загрузчик с деревом устройств на отдельном от операционной системы чипе. [4]

Собственный формат файла конфигурации, используемый для аналогичных целей, формат файла FEX. [5] является стандартом де-факто среди Allwinner SoC .

Windows (за исключением Windows CE ) не использует DeviceTree (файл DTB), как описано здесь. Вместо этого он использует ACPI для обнаружения устройств и управления ими. [6]

В процессе загрузки iOS , iPadOS и ARM macOS загрузчик низкого уровня (LLB) загружает дерево устройств, зашифрованное Apple, в основную память, а затем загружает iBoot .

Основная загрузка

[ редактировать ]

Проект coreboot использует деревья устройств, но они отличаются от плоских деревьев устройств, используемых в ядре Linux. [7]

Пример формата исходного кода дерева устройств (DTS):

/dts-v1/;

/ {
    soc {
        flash_controller: flash-controller@4001e000 {
            reg = <0x4001e000 0x1000>;
            flash0: flash@0 {
                label = "SOC_FLASH";
                erase-block = <4096>;
            };
        };
    };
};

В приведенном выше примере строка /dts-v1/; означает версию 1 синтаксиса DTS.

Дерево имеет четыре узла: / (корневой узел), soc (расшифровывается как « система на чипе »), flash-controller@4001e000 и flash@0 (экземпляр флэш-памяти, использующий контроллер флэш-памяти). Помимо этих имен узлов, последние два узла имеют метки flash_controller и flash0 соответственно.

Последние два узла имеют свойства , которые представляют пары имя/значение. Свойство label имеет строковый тип, свойство erase-block имеет целочисленный тип и свойство reg представляет собой массив целых чисел (32-битные значения без знака). Значения свойств могут ссылаться на другие узлы в дереве устройств посредством их фанделов . Фандл для узла с меткой flash0 будет написано как &flash0. Фандлы также являются 32-битными значениями.

Части имен узлов после знака «at» ( @) — адреса единиц . Адреса модулей определяют адрес узла в адресном пространстве его родительского узла.

Вышеупомянутое дерево может быть скомпилировано стандартным компилятором DTC в двоичный формат или ассемблер DTB . Однако в Zephyr RTOS файлы DTS компилируются в файлы заголовков C (.h), которые затем используются системой сборки для компиляции кода для конкретной платы . [8]

См. также

[ редактировать ]
  1. ^ Jump up to: а б с «Спецификация дерева устройств» (PDF) . Релиз v0.3. http://devicetree.org. 13 февраля 2020 г.
  2. ^ Jump up to: а б «Контрольный список поддержки ARM SoC Linux» (PDF) .
  3. ^ Симмондс, Крис (2017). Освоение программирования для встроенного Linux: раскрыть весь потенциал встроенного Linux (второе изд.). Бирмингем, Великобритания. ISBN  978-1-78728-885-0 . OCLC   995052708 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  4. ^ «Обновление u-boot для плат Boundary Devices» . 08.11.2013.
  5. ^ «Руководство по Фексу» . Linux-Sunxi.org. 30 мая 2014 г. Проверено 12 июня 2014 г.
  6. ^ «Драйвер ACPI для Windows» . microsoft.com. 14 декабря 2021 г. Проверено 19 сентября 2022 г.
  7. ^ Сунь, Цзимин (2015). Решения для встроенного ПО: лучшие практики разработки для Интернета вещей . Винсент Циммер, Марк Джонс, Стефан Рейнауэр. [Соединенные Штаты]. п. 82. ИСБН  978-1-4842-0070-4 . OCLC   902804314 . {{cite book}}: CS1 maint: отсутствует местоположение издателя ( ссылка )
  8. ^ «Введение в дерево устройств – Документация проекта Zephyr» . 2.6.0. Проект Зефир . 05.06.2021.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: dd2a69aba7c014f438bd4a49a5056895__1722033780
URL1:https://arc.ask3.ru/arc/aa/dd/95/dd2a69aba7c014f438bd4a49a5056895.html
Заголовок, (Title) документа по адресу, URL1:
Devicetree - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)