2015-06-08 3 views
5

Загрузчики как U-Boot, которые не реализуют API Open Firmware, как ожидается, перейти к ядру двоичную форму уплощенной дерева устройств - LinuxFDTBlobЗачем нужна структура структуры дерева устройств (DTS) как в загрузчике, так и в исходном коде ядра?

Почему DTS файлы присутствуют в ядре также? Разве это не избыточно?

В качестве примера, источник U-загрузочный код имеет следующий файл:
arch/arm/dts/tegra124-jetson-tk1.dts

Этот файл также можно найти в разделе Linux исходный код:
arch/arm/boot/dts/tegra124-jetson-tk1.dts

Хотя версия ядра в 4 раза U-boot, я хотел бы знать причину этой избыточности. Я считаю, что поддерживать и использовать как для сторонних разработчиков, так и для разработчиков более сложно:

+1

Это проблема, когда [люди пытались решить, как ее решить в течение некоторого времени] (http://thread.gmane.org/gmane.comp.devicetree.compiler/14). – Notlikethat

+0

похоже, что миграция не завершилась, когда они почти нашли решение: | – Hamzahfrq

+1

Они предназначены для разных целей. Версия * u-boot * позволяет использовать несколько версий * u-boot * для нескольких плат. Он является частью инфраструктуры [tag: kbuild] или * config *, которая является WIP. Linux-версии предназначены для загрузки Linux. Очевидно, что * u-boot * - это урезанная версия, поскольку для загрузки требуется не так много периферийных устройств. Вы можете сделать тот же аргумент для всех драйверов * u-boot *; большинство из них - копии драйверов Linux с прерываниями, замененными подпрограммами опроса. Почему существуют BSD и Linux? Разве они не дублируют друг друга? Почему у каждого проекта есть собственный связанный список? –

ответ

1

Ниже ответ из комментариев Artlessnoise:

Источник U-Boot использует U-Boot DTB в то время как Linux использует Linux DTB, когда загрузке ядра. Версия u-boot - это урезанная версия, так как для загрузки требуется не так много периферийных устройств. Вы всегда используете версию ядра для Linux i.e. U-boot передает этот файл в Linux (а также загружает bzImage или vmlinux).

Многие из драйверов u-boot почти идентичны Linux. Очевидно, вы можете сделать тот же аргумент для всех драйверов u-boot; большинство из них - копии драйверов Linux с прерываниями, замененными подпрограммами опроса. Использование одного и того же интерфейса с открытой прошивкой позволяет им подойти ближе.

+0

Итак, тогда Linux полностью игнорирует дерево устройств, переданное из u-boot? Или это дерево устройств linux, расположенное поверх дерева устройств u-boot, а затем linux использует объединенное дерево? Похоже, этот вопрос никогда не получил ответа. –

+0

Да linux игнорирует дерево устройств, которое находится в u-boot. Дерево устройств linux приходит после части ядра. это похоже на u-boot-> Kernel-> dtb-> rootfs –

+0

@ChrisWarth Linux kernel _uses_ DTB, переданный u-boot. Но DTB, передаваемый u-boot, не является DTB uboot. Это DTB ядра (присутствует в источниках ядра). Uboot DTB используется uboot во время загрузки, для настройки устройств, прежде чем ядро ​​будет даже загружено в память – Hamzahfrq

3
  1. UBoot и Linux Kernel - это два разных проекта. Поэтому для управления отдельными проектами им потребуются разные копии.
  2. Ядро Linux можно загрузить и с другими загрузчиками. Существуют и другие способы передачи DTB в ядро ​​linux, например. образ ядра можно добавить с помощью DTB, который ему нужно использовать.

Из-за вышеупомянутых причин имеет смысл копировать копии DTS.

+0

, но мне больше смысла, если загрузчик и ядро ​​не зависят от деталей оборудования, т.е. то же самое дерево устройств, которое должным образом поддерживается, должно работать для обоих из них. – Hamzahfrq

+0

В идеале мир да, их следовало бы разделить. Деревом устройств был ответ Linux на не поддерживаемые порты ARM SoC различными компаниями. Технически пользователи Linux поддерживают файлы DTS. Uboot будет беспокоиться только о нескольких аспектах DTS, таких как тип дуги, память, механизм хранения и т. Д .; Хотя Linux DTS должен быть исчерпывающим. Так что теперь это вопрос политики и логостей; кто будет поддерживать то, что и где; а не техническую осуществимость. Личное мнение, это дублирование будет продолжаться до тех пор, пока обнаружение ручного устройства не будет стандартизировано (например, PCI). –

0

Uboot имеет отдельный файл DTS, который может быть установлен как CONFIG_DEFAULT_DEVICE_TREE в uboot defconfig. Этот DTS-файл построен с изображением uboot, что означает, что он является частью образа uboot. Синтаксис файла uboot DTS аналогичен файлу DTS ядра Linux. Файл DTS Linux скомпилирован в DTB-файл и используется отдельно для анализа аппаратной конфигурации ядра Linux. Изображение Linux DTB запускается отдельно от образа ядра Linux.

Смежные вопросы