Невозможно скомпилировать двоичное дерево устройства из-за отсутствующего узла/метки.

Вопрос или проблема

Я пытаюсь создать образ petalinux, используя SDK petalinux. После начала сборки я получаю ошибку, когда процесс пытается построить system.dtb.

Ошибка: “(ссылки phandle): Ссылка на несуществующий узел или метку “ps7_scugic_0”, которая передается дважды. Я полагаю, что это какое-то прерывающее устройство, используемое в ZYNQ SoC и видимое и сопоставленное в XML-файле, используемом для создания частей этой сборки.

Как я могу создать этот узел? Нужно ли мне редактировать файлы dts и dtsi?

Возможно, в вашем исходном файле дерева устройств отсутствует псевдоним для экземпляра ps7_scugic_0. Если это так, то все, что вам нужно сделать, это создать запись в дереве устройств, которая укажет ядру, какой драйвер устройства будет использовать ваш экземпляр ps7_scugic_0, а также указать на то, где находится пользовательский IP в пространстве памяти.

Пожалуйста, обратитесь к обучающему видео по адресу http://zedboard.org/course/petalinux-zynq%C2%AE-7000-all-programmable-soc?sid=60441 для получения дополнительной информации о том, как добавить узел в дерево устройств.

Ответ или решение

Чтобы решить проблему с ошибкой "Reference to non-existent node or label ‘ps7_scugic_0’" при компиляции файлов устройства для вашего проекта Petalinux, необходимо выполнить несколько шагов. Ошибка связана с отсутствием узла или метки, в данном случае ps7_scugic_0, которая используется в системе-на-кристалле ZYNQ, что может помешать успешному созданию бинарного дерева устройств (DTB).

Причина ошибки

Эта ошибка может возникнуть, если соответствующий узел не определен в файлах Device Tree Source (DTS) или включаемых файлах Device Tree Source Include (DTSI). Узел ps7_scugic_0 указывает на контроллер прерываний, который нужен для корректной настройки системы.

Решение

Шаг 1: Изучение существующих DTS и DTSI файлов

  • Проверьте ваш основной DTS файл, чтобы убедиться, что упоминается узел ps7_scugic_0.
  • Откройте ваш DTSI файл, обычно с именем, например, system-top.dtsi, и проверьте, что узел ps7_scugic_0 присутствует.

Шаг 2: Редактирование DTS/DTSI

  • Если узел отсутствует, добавьте его вручную. Может потребоваться копирование конфигурации из стандартного проекта или шаблона.
  • Типичный блок для GIC может выглядеть так:
ps7_scugic_0: interrupt-controller@f8f00100 {
    compatible = "arm,cortex-a9-gic";
    #interrupt-cells = <3>;
    interrupt-controller;
    reg = <0xf8f00100 0x100>, <0xf8f01000 0x100>;
};

Шаг 3: Проверка на алиасы

  • Убедитесь, что все алиасы корректно настроены. Можно проверить в разделе aliases вашего DTSI или связанного файла, чтобы увидеть, есть ли отсылки или использование ps7_scugic_0.

Шаг 4: Регистрация драйвера

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

Шаг 5: Валидация изменений и сборка

  • После внесения изменений, пересоберите проект, чтобы проверить, устранили ли вы ошибку. Используйте команды в PetaLinux SDK, такие как petalinux-build, для начала процесса сборки и валидации.

Дополнительные ресурсы

  • Просмотрите обучающие материалы, такие как указанные на веб-сайтах, например, этот курс, чтобы углубить понимание того, как добавлять и управлять узлами в дереве устройств.

Следуя этим шагам, вы сможете исправить ошибки в структуре вашего дерева устройств и обеспечить успешную компиляцию DTB файла.

Оцените материал
Добавить комментарий

Капча загружается...