в чем польза плоского дерева устройств - ядро ​​Linux

Я прохожу процесс загрузки и запуска ядра. В чем именно заключается использование FDT (плоское дерево устройств)?

Многие ссылки, которые я прочитал, утверждают, что uboot передает информацию о конфигурации платы и SOC в ядро ​​в форме FDT

https://wiki.freebsd.org/FlattenedDeviceTree

Зачем ядру информация о конфигурации платы?

Я задаю этот вопрос, потому что, когда мы создаем драйвер устройства в Linux, мы используем его для инициализации устройства при вызове probe () или module_init () и использовании функции request_mem_region () и ioremap (), чтобы получить диапазон адресов, а затем установить часы & другой регистр драйвера.
Что на самом деле делает request_mem_region () и когда это необходимо?

Теперь, если мои драйверы для устройств на чипе и вне чипа выполняют полную инициализацию платы.
Тогда какой смысл flattened device tree для ядра?


person Katoch    schedule 16.02.2014    source источник
comment
Некоторые из ваших представлений о том, как настраивается драйвер устройства, теперь устарели в дереве устройств. Без обид, но вот видео о намерении использовать дерево устройств. У Томаса Петаццони также есть несколько слайд-презентаций на сайте Free Electrons.   -  person sawdust    schedule 17.02.2014
comment
@sawdust, значит, вы хотите сказать, что prob (0 & module_init () или init_module (), эти функции не используются для инициализации драйвера ... но я использую ту же концепцию на моем оборудовании RPi .. означает создание загружаемого модуля, который используется для выполнить всю его инициализацию в функции init_module () ... загрузить этот модуль с помощью команды insmod () и использовать его ... поэтому вы хотите сказать, что теперь мы не используем концепцию переносного модуля ядра в ядре Linux ...? пожалуйста, предложите ... !!   -  person Katoch    schedule 17.02.2014
comment
Итак, вы хотите сказать, что ... - Я не писал и не имел в виду ничего близкого к тому, о чем вы предполагаете. Старый метод файла платы и данных платформы по сравнению с деревом устройств четко описан в этих видео и слайд-презентациях. упомянул. Поэтому вместо того, чтобы гадать и неправильно истолковывать написанное мною простое предложение, нажмите на эти ссылки.   -  person sawdust    schedule 18.02.2014
comment
да, это видео объясняет все ... одну вещь, которую я хотел бы знать ... какая версия ядра была первой, которая перешла к реализации дерева устройств ...? Все ли современные SOC в наши дни следуют дереву устройств Flatterned для передачи информации ядру, или в промышленности используется все еще старый подход?   -  person Katoch    schedule 19.02.2014
comment
Для ARM дерево устройств впервые появилось в Linux 3.1. В вашем втором вопросе нет взаимоисключающих терминов по обе стороны от «или».   -  person sawdust    schedule 20.02.2014
comment
взаимоисключающие .. значит сказать что ..?   -  person Katoch    schedule 20.02.2014
comment
@Katoch В настоящее время очень немногие из огромного числа SoC, поддерживаемых ядром Linux, используют подход дерева устройств. По общему мнению, деревья устройств полезны в большинстве случаев и постепенно внедряются.   -  person TheCodeArtist    schedule 02.04.2014
comment
Возможный дубликат Как программировать файлы дерева устройств Linux .dts?   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 09.07.2017


Ответы (1)


Вы правы, предполагая, что файлы платы и деревья устройств необходимы для инициализации блоков на кристалле и периферийных устройств вне кристалла.

  1. Во время загрузки соответствующие драйверы для всех блоков на кристалле SoC и внешних периферийных устройств, подключенных к нему, должны быть «исследованы», то есть загружены и вызваны. На таких шинах, как USB и PCI, периферийные устройства могут быть обнаружены физически и пронумерованы, а их соответствующие драйверы проверены. Однако в целом такая возможность НЕ доступна для остальных периферийных устройств на остальных шинах, таких как I2C, SPI и т. Д.

  2. В дополнение к вышесказанному, когда проверяется драйвер устройства, необходимо также предоставить ему некоторую информацию о том, как мы собираемся настраивать и использовать оборудование. Это зависит от варианта использования. Например, скорость передачи данных, с которой мы хотели бы работать с портом UART.

Оба вышеуказанных класса информации, т.е.

  • Физическая топология оборудования.
  • Варианты конфигурации оборудования.

обычно определялись как structs в файле "доска".

Однако использование подхода с использованием файла платы потребовало пересборки ядра даже для того, чтобы просто изменить настраиваемый параметр на другое значение во время инициализации. Кроме того, когда существует несколько физических плат, немного различающихся по своей топологии / конфигурации, использование файловых плат становится слишком громоздким для обслуживания.

Отсюда и интерес к хранению этой информации отдельно в дереве устройств. Любой драйвер устройства может анализировать соответствующие ветви и листья дерева устройств для получения необходимой информации.


При разработке собственного драйвера устройства, если ваша платформа поддерживает дерево устройств, вам рекомендуется использовать дерево устройств для хранения «данных платформы», необходимых для вашего драйвера устройства. Это должно помочь вам четко разделить:

  • общий код драйвера для вашего устройства в файле ‹driver.c> и

  • параметры конфигурации устройства, относящиеся к этой платформе, в дерево устройств.

Пошаговый подход к перенос ядра Linux на плату / SoC должен помочь вам оценить все нюансы и преимущества использования дерева устройств.

person TheCodeArtist    schedule 02.04.2014