Имена наложений в дереве устройств

Я вижу любопытную проблему при попытке загрузить наложение дерева устройств на черный Beaglebone. Загрузчик не может загрузить файл.dtbo, потому что он ищет файл с именем, отличным от имени, которое ему было сказано загрузить. Файл.dts был скомпилирован на том же устройстве с помощью команды:

dtc -O dtb -o TEST-DT-00A0.dtbo -b 0 - @ TEST-DT-00A0.dts

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

echo TEST-DT-00A0.dtbo> /sys/devices/bone_capemgr.9/slots

Я вижу ошибку:

-bash: эхо: ошибка записи: нет такого файла или каталога

Изучение причины сбоя с помощью dmesg показывает, что загрузчик пытался загрузить файл с именем (-0 вставлено в имя файла):

TEST-DT-0-00A0.dtbo

Конечно, если я переименую файл.dtbo в имя, ожидаемое загрузчиком, он загружается правильно и работает нормально.

Кто-нибудь знает, почему дополнительный '-0' был добавлен к имени загрузчиком дерева устройств? На втором Beaglebone загрузчик ожидал, что файл получит имя TEST-DT-00-00A0.dtbo (к имени добавлено -00).

Если это поможет, вот вывод от uname:

Linux beaglebone 3.8.13-bone79 # 1 SMP вт 13 октября 20:44:55 UTC 2015 armv7l GNU/Linux

Спасибо за любую помощь!

2 ответа

Решение

Похоже, что загрузчик дерева устройств немного упрощен и предполагает, что имя файла содержит ровно 16 символов. Если фрагмент дерева устройства не имеет имени из 16 символов, то при загрузке фрагмента могут возникать различные уровни заполнения или усечения.

Тогда правильная вещь будет для переименованного фрагмента во что-то вроде:

TEST-DT-12345678-00A0.dtbo

(16 символов перед -00A0.dtbo)

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

Кроме того, будьте осторожны при попытке загрузить файл с путем:

echo /lib/firmware/TEST-DT-12345678-00A0.dtbo> /sys/devices/bone_capemgr.*/slots

Символы в пути будут учитываться до ожидаемой длины имени из 16 символов, в результате чего загрузчик дерева устройств пытается загрузить фрагмент:

TE-00A0.dtbo

Если при попытке загрузить фрагмент возникают ошибки "Нет такого файла или каталога", обязательно проверьте dmesg!

Обратите внимание, что наложения дерева устройств теперь устарели, и Uboot следует использовать для настройки при загрузке или команде config-pin.

Проверьте здесь раздел: Куда делся файл слотов?https://elinux.org/Beagleboard:BeagleBoneBlack_Debian#U-Boot_Overlays

Пример скрипта config-pin UART4

      #!/bin/sh
config-pin p9.11 uart
config-pin p9.13 uart
stty -F /dev/ttyO4 sane
Другие вопросы по тегам