Вопрос или проблема
Я пытаюсь создать образ 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 файла.