Как узнать, какой ящик дерева устройств (dtb-файл) я использую?

Я работаю с TS-4900, встроенным «Компьютером на модуле», подключенным к материнской плате, с использованием Yocto Linux. Он использует U-Boot для запуска и, предположительно, основываясь на модели базовой платы, он выбирает правильный файл dtb для запуска, и, возможно, если он не сможет найти правильный, он возвращается к «универсальному» для моего модуля.

Но как / где он определяет правильный? Как я могу определить, какой .dtb был использован, или указать, какой из них следует использовать?

Ниже приведены загрузочные сообщения U-Boot.

U-Boot 2014.10-g3ac6ec3 (Jan 29 2015 - 17:20:15) CPU: Freescale i.MX6SOLO rev1.1 at 792 MHz Reset cause: POR Board: TS-4900 Revision: C Watchdog enabled I2C: ready DRAM: 1 GiB MMC: FSL_SDHC: 0, FSL_SDHC: 1 SF: Detected N25Q64 with page size 256 Bytes, erase size 4 KiB, total 8 MiB *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: using phy at 7 FEC [PRIME] Press Ctrl+C to abort autoboot in 1 second(s) (Re)start USB... USB0: Port not available. USB1: USB EHCI 1.00 scanning bus 1 for devices... 2 USB Device(s) found scanning usb for storage devices... 0 Storage Device(s) found No storage devices, perhaps not 'usb start'ed..? Booting from the eMMC ... ** File not found /boot/boot.ub ** ** File not found /boot/imx6dl-ts4900-13.dtb ** Booting default device tree 42507 bytes read in 196 ms (210.9 KiB/s) 118642 bytes read in 172 ms (672.9 KiB/s) ICE40 FPGA reloaded successfully 4609784 bytes read in 337 ms (13 MiB/s) ## Booting kernel from Legacy Image at 12000000 ... Image Name: Linux-3.10.17-1.0.0-technologic+ Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 4609720 Bytes = 4.4 MiB Load Address: 10008000 Entry Point: 10008000 Verifying Checksum ... OK ## Flattened Device Tree blob at 18000000 Booting using the fdt blob at 0x18000000 EHCI failed to shut down host controller. Loading Kernel Image ... OK Using Device Tree in place at 18000000, end 1800d60a Starting kernel ... [ 0.000000] Booting Linux on physical CPU 0x0 (Kernel startup commences...) 

  • grab git repo из нескольких источников в рецепте Yocto
  • fatal: Не репозиторий git?
  • Напишите правило udev из рецепта битбокса
  • Игнорирование события первого щелчка на dpms или пробуждении экрана
  • Значение? = И? == в bitbake / yocto
  • Не удается установить gphoto2 на Yocto Linux
  • Настройка скрипта update-rc.d только для запуска
  • Использует ли Yocto linux SysVinit или systemd?
  • 2 Solutions collect form web for “Как узнать, какой ящик дерева устройств (dtb-файл) я использую?”

    Я опоздал на это, но я реализовал этот сценарий, и я обращусь к нему для тех, кто находит это, используя интернет-поисковую систему.

    Этот компьютер на модуле можно разместить практически на любой платформе TS или пользовательской базовой платой, и мы хотели, чтобы она автоматически работала без необходимости корректировки используемого дерева устройств. У нас есть регистр сдвига с 8 входами на любой несущей плате с уникальным идентификатором для основной платы. На TS-8550 это 0x13. http://wiki.embeddedarm.com/wiki/TS-4900#Baseboard_ID

    Таким образом, в U-Boot bbdetect команда bbdetect считывает GPIO, подключенный к этому регистру сдвига, и устанавливает переменную среды $ baseboardid. Сначала U-Boot попытается загрузить дерево устройств с конкретной /boot/imx6${cpu}-ts4900-${baseboardid}.dtb на /boot/imx6${cpu}-ts4900-${baseboardid}.dtb . Если он не сможет найти его, он будет использовать резервное дерево устройств на /boot/imx6${cpu}-ts4900.dtb . Этот последний файл имеет нормальные значения по умолчанию, которые будут работать на любой плате оператора. TS-8550 не нуждается в базовой плате несущей платы, поэтому он возвращается к стандартному дереву устройств и продолжает загружаться.

    Чтобы ответить на ваш первоначальный вопрос,

     cat /proc/device-tree/model 

    Все деревья наших устройств будут иметь немного другую модель в дереве устройств.
    Например, безопасный запас:

    • «Технологические системы i.MX6 Quad TS-4900 (Дерево устройств по умолчанию)»

    Или несущая плата TS-TPC-8390 с определенным деревом устройства:

    • «Технологические системы i.MX6 Quad TS-4900 (TS-TPC-8390)»

    Когда U-Boot выполняет команду загрузки, он предоставляет адрес памяти для ядра и адрес памяти для блочного дерева устройства. Поэтому перед этой командой он должен загружать эти файлы в память. Основываясь на представленных вами сообщениях, мы видим, что два файла не загружались с карты eMMC / SD:

     /boot/boot.ub /boot/imx6dl-ts4900-13.dtb 

    Возможно, что либо эти файлы просто отсутствовали, их путь неправильный, либо неправильное устройство: раздел был передан команде загрузки U-Boot. В любом случае команда не работает. На данный момент, похоже, что загрузчик пытается загрузить «по умолчанию» дерево устройств – возможно, хранится на том же носителе, что и сам загрузчик.

    Чтобы точно узнать, что происходит, вам нужно остановить процесс загрузки у загрузчика и получить доступ к командной строке U-Boot. Отсюда вы можете ввести:

     printenv 

    Это напечатает переменные среды U-boot. Многие из этих переменных ссылаются на другие переменные. Некоторые из этих переменных часто выполняются как скрипты, поэтому вы можете увидеть сценарии загрузки, сценарии загрузки ядра и fdt и т. Д. Чтобы выяснить последовательность загрузки, найдите переменную bootcmd (или что-то подобное). Обычно это то, что в конечном итоге выполняется во время загрузки. Вам нужно будет отслеживать последовательность загрузки из этой точки с помощью нескольких переменных, но вы должны увидеть, какие команды нагрузки используются для загрузки FDT в память. Если вы хотите опубликовать вывод printenv , мы можем идентифицировать точную логику, используемую здесь.

    Interesting Posts

    Операционная система хостинга неизвестна на сайте www.netcraft.com

    Fluxbox: есть ли проблема с модальными диалогами java и fluxbox?

    wicd – нет связи после загрузки, необходимо перезапустить вручную?

    Scribes Editor и Slackware64 13.37 – PyGTKSpell не может быть найден

    Почему netstat не показывает мне порты?

    как разделить файл и строки

    Существует ли способ, которым злоумышленник может использовать mkdir для компрометации системы?

    IP-адрес источника локальных DNS-запросов на локальный сервер?

    Потеря звука после установки вина 1.5 (+ python 2.7)?

    Установка переменных в / etc / environment, не имеющих влияния, но установка их в командной строке

    Сортировать по шестнадцатеричному значению

    Как пропустить невосприимчивый сервер

    Как я могу зарезервировать блок памяти из ядра Linux?

    Не удается войти в систему после запуска автозапуска службы при запуске

    При установке пакета я могу предоставить разрешение на запись для определенных файлов?

    Linux и Unix - лучшая ОС в мире.