Что такое файл u-Boot dtb и как его использовать (BeagleBoard xM)?

12

Я пытаюсь создать собственный Linux для BeagleBoard xM (Rev. C). Я много занимаюсь C / C ++, но я новичок в создании и установке Linux с нуля.

Я использовал устройство сборки Yocto Project ( https://www.yoctoproject.org/ ), которое казалось многообещающим - оно создавало файлы для загрузчика u-Boot, ядра Linux и корневой файловой системы.

На этой странице приведены инструкции по настройке карты micro SD с файлами, сгенерированными Yocto. Однако файлы изображений содержат файл «.dtb», который не упоминается в инструкциях по настройке.

Этот файл имеет какое-то отношение к оборудованию платы? На разных сайтах упоминается загрузка файлов dtd (может быть, в uEnv.txt?), Но я не нашел никакой подробной информации.

Я использовал приведенные выше инструкции для настройки загрузочного раздела с MLO и u-boot.img, и немного испортил uEnv.txt. Я также настроил второй раздел с корневой файловой системой.

Я смог загрузить и войти в систему (через консоль последовательного порта), но похоже, что большинство оборудования платы - например, видео и все USB-устройства, включая Ethernet - не работало. Может ли это быть из-за того, что я не использовал файл .dtb?

Может кто-нибудь объяснить dtb и как использовать его на доске гончей? Спасибо!

Джереми
источник
Получается, что я неправильно прочитал имя файла - я изначально думал, что это файл «.dtd», но на самом деле это «.dtb» - вот почему я не смог найти информацию о нем. Вопрос теперь обновлен.
Джереми
Минимальный пример с виртуальным устройством QEMU для лучшего понимания концепции: stackoverflow.com/questions/17488320/…
Сиро Сантилли lli 新疆 中心 法轮功 六四 事件

Ответы:

12

Отвечая на мой собственный вопрос, после того, как я понял, что искать. Файл "dtb" содержит BLOB-файл дерева устройств (или двоичный файл) (хорошее описание здесь ). Это новый (э) способ передачи аппаратной информации о плате в ядро ​​Linux.

Его можно загрузить в память и передать ядру с помощью u-Boot.

Вот команды u-Boot, которые я использовал:

setenv bootargs 'console=tty0 console=ttyO2,115200n8 root=/dev/mmcblk0p2 rootwait rootfstype=ext4 rw'
fatload mmc 0:1 0x80300000 zImage
fatload mmc 0:1 0x815f0000 beagle-xm.dtb
bootz 0x80300000 - 0x815f0000

zImage - ядро, а beagle-xm.dtb - дерево объектов. Я автоматизировал процесс загрузки, установив переменную «uenvcmd = ...» в uEnv.txt (с указанным выше), но это немного уродливо и, возможно, есть лучшие способы.

Обратите внимание, что это загружается, и говорит, что он загрузил дерево устройств ОК. Тем не менее, у меня все еще нет USB-устройств или видео (насколько я могу судить). Тем не менее, я подозреваю, что это может быть другая проблема.

Джереми
источник
3
Это новый (э) способ передачи аппаратной информации о плате в ядро ​​Linux. Ранее не было способа передать аппаратную информацию ядру. Вместо этого ядро ​​должно было бы статически включать всю информацию и иметь C-файл для конкретной платы, чтобы перечислить все эти отображения. Это был кошмар обслуживания с точки зрения ядра.
BatchyX
Спасибо! Я понял, как загрузить файл dtb, и теперь Linux загружается и выдает различные сообщения о загрузке драйверов, но я не вижу никаких USB-устройств (включая модуль Ethernet). Смотрите новый вопрос: ссылка . Может быть, есть что-то, что мне нужно вручную настроить в Linux?
Джереми
Но какой адрес использовать для файла dtb? Например, если мой zImage идет по адресу 0x43000000 (вместо примера выше 0x80300000), куда должен идти dtb?
Андре ван Шубрук
2

Я использую Ubuntu 14.04 на beaglebone black, поэтому мои настройки могут немного отличаться, но вот как я загрузил пользовательский dtb:

В uEnv.txt добавьте строку с: dtb=name-of-desired.dtb

Места поиска должны быть такими, как указано здесь . Для меня это было то, /boot/dtbs/linux-kernel/где linux-kernel - это имя загруженной версии.

Дамиан Манда
источник
0

Обратите внимание, что есть 2 дБ. U-boot дтб и ядро ​​дтб. Это две разные вещи. Плата U-boot dts / dtb используется не всегда, не обязательно, кстати, в u-boot вы можете использовать dtb «u-boot», встраивая его в u-boot или объединяя его в u-boot.

Анджело Дурегелло
источник