Jump to content

    
R6L-025

Ultrascale MPSoc. Сборка и дебаг софта под embedded Linux

Recommended Posts

Доброго времени суток!

Возникла задача внезапно начать работать с Xilinx, а точнее с ulatrascale+ MPSoc. На нем будет Linux, и надо отлаживать софт и драйверы.
В связи с чем возникли вопросы - а как компилить и отлаживать? Использовать Petalinux, или сторонний дистр, и т.д.

 

Я поковырялся в документации на Peta - и как-то она не воодушивила. Один из предлагаемых вариантов TCF Agent, но не хотелось бы привязываться к Vitis. Другой вариант который они предлагают - подсовывать исходники в сборочную систему yocto, и пересобирать весь образ. А это - пропустил точку с запятой в коде - 20 минут курим пока petalinux-build все не попробует собрать, чтоб сообщить об ошибке. Вообще не вариант. Кросс-компилятор - хорошо, пока не появятся зависимости от сторонних библиотек. Да и открыт вопрос с дебагом. Как я понял еще можно SDK от самого yocto использовать, тогда вопрос с библиотеками решается тем что все собирается в наитивной среде. Но тоже - куча лишних движений чтоб потом забросить собранный проект на плату, и там дебаджить через gdbserver. 

 

С альтеровским HPS проще - qemu образ или реальная железяка с поднятой системой (у меня там Arch был). На ней через NFS монтировал директорию хоста где лежат исходники. На хосте правил код, шел через ssh на плату, там компилился, и через cgdb отлаживался на самой плате. Можно тот же CLion подцепить, там есть фича с помощью которой он сам синхронизирует исходники на хосте и целевом устройстве, и там же компилится и запускает gdb сервак.

 

Собственно, кто какие варианты отладки использует? Можно ли к petalinux прикрутить gcc (я добавлял пакет в meta-user, он появился в диалоге конфигурации, но в собранной системе так и не появился)? Стоит ли вообще ковырять Petalinux, или проще с нормальным дистром работать?

Share this post


Link to post
Share on other sites

Проще всего установить Xilinx SDK или Vitis. В нем компилить и отлаживать приложение под Linux. Готовый образ Linux есть на сайте Xilinx.

Можно установить petalinux и собрать свой образ. Плюс такого подхода - можно включать нужные опции ОС и библиотеки. Можно и компилить свое приложение компилятором из petalinux. Для этого создать SDK (petalinux-build --sdk), затем установить переменные окружения:

source images/linux/sdk/environment-setup-aarch64-xilinx-linux

и, как обычно, вызывать $(CROSS_COMPILE)gcc.

On 3/11/2021 at 5:29 PM, R6L-025 said:

Другой вариант который они предлагают - подсовывать исходники в сборочную систему yocto, и пересобирать весь образ.

Это метод для встраивания своего приложения в RootFS (готового, отлаженного). А не для разработки и отладки.

Share this post


Link to post
Share on other sites

Да уже разобрался, примерно. Можно сгенерить в ёкте SDK, его использовать как sysroot, и компилить кросс-компилятором на хосте. А отлаживать по ssh на плате. С R5 ядром история похожая, только там sysroot не нужен, ибо baremetall/freertos. Единственная привязка к системе Vitis остается - xsct. Он нужен для загрузки эльфа в r5 проц. А после того как загружен - можно gdb использовать, который вместе с кросс-компилятором идет в составе petalinux пакета.

Да мне категорически не хочется использовать Vitis без необходимости. Eclipse как среда разработки - ну говно мамонта же. И работает так же. Со всякими глюками. В довесок мне надо использовать сторонние библиотеки под CMake. Eclipse по причине указанной выше CMake не умеет. Кроме того проект надо будет отдавать другим разработчикам, прикладникам. Они знать ничего не знают про vitis и сопутствующую периферию. Им просто надо писать код с минимум привязки к сторонним инструментам. Кросс-тулчейн я могу спокойно упаковать в docker контейнер, и отправить им хоть по почте. А с vitis который под 70 Gb весит... не разгуляешься. Ну и то что vitis использует кастомный формат проекта - тоже не радует. Формат жестко привязан только к Eclipse, и на другую IDE не перескочишь.

Share this post


Link to post
Share on other sites

Vitis нужен. Там автоматом собирается FSBL ATF PMUFW DTB и собирается загрузочный образ

Ядро и U-boot скачиваете с оф. репозитория

Petalinux не нужен

Edited by карамболь

Share this post


Link to post
Share on other sites

Ну, ATF не собирал, но все остальное и без vitis отлично собирается. FSBL - это просто обычный код под A/R ядро. Кросс-компилятор его вполне себе собирает. Я даж встроил в него тест памяти в самом начале его работы (попросили прикрутить). Без vitis обошлось. PFMU и DTB у меня собирается в petalinux, но, в будущем есть желание от него уйти на чистый yocto/buildroot + отдельно собирать все эти компоненты вместе с ядром и uboot

Share this post


Link to post
Share on other sites
8 hours ago, R6L-025 said:

 PFMU и DTB у меня собирается в petalinux, но, в будущем есть желание от него уйти на чистый yocto/buildroot + отдельно собирать все эти компоненты вместе с ядром и uboot

Да, так и делают: Video-tutorial : Embedded FPGA - поднимаем Linux на Zynq-7000, EBAZ4205 Tutorial

Share this post


Link to post
Share on other sites
2 часа назад, Raven сказал:

Да, видел что стрим был, но так руки пока и не дошли до него)

Share this post


Link to post
Share on other sites

Мы в наших проектах используем buildroot + компилятор из https://toolchains.bootlin.com/downloads/releases/toolchains/aarch64/tarballs/. Для правки и отладки Visual Code Studio. Им можно и R5 отлаживать под free-rtos.

Petalinux не используем совсем, только на начальном этапе когда нужно было понять что и как. Vitis почти не используем, так как достаточно Visual Code Studio. Используем его только для перетаскивания библиотек BSP & FSBL в основной код.

Share this post


Link to post
Share on other sites

 

10 часов назад, byaaka сказал:

Им можно и R5 отлаживать под free-rtos

А через что отлаживаете? Ну, я имею в виду что в качестве дебаг сервера используется под R5 ядрами? Я только xsct понял как приспособить. Ну и вроде как можно TCF agent отдельно прицепить, но это извращение какое-то. 

А я выкрутился с IDE - перенес нужные проекты под cmake (в vitis максимум сгенерить ld скрипт, и платформенные библиотеки xilinx + freertos линкуемые отдельно к cmake проекту), к нему подключаю кросс-компилятор из состава petalinux.

Share this post


Link to post
Share on other sites
14 минут назад, byaaka сказал:

Благодарю! Посмотрю. Вспоминал про openOCD, но не думал что он будет тут работать

Share this post


Link to post
Share on other sites

я бы ещё добавил что для отладки и телеметрии используем пакет http://baical.net/index.html (очень удобно)

и межпроцессорный обмен по openamp с libmetal (требуется фикс, там бага и её не спешат править).

если нужно патчи для libmetal & openamp могу выложить

 

Edited by byaaka

Share this post


Link to post
Share on other sites

Спасибо, интересная штука - baikal. А Вы его как используете, для сборка метрик производительности?

На счет openAMP, libmetal - конечно интересно было бы посмотреть что там не так.
Я дней пять убил на то чтоб запустить libmetal-echo из из UG. Не вышло. openAMP как-то сразу заработал, но там, судя по документации ограничение на размер пакета 512 byte. Пока что пришел к тому что забил на эту пару, и сел писать свой драйвер для управления со стороны  APU модулем IPI. Но, было бы интересно посмотреть что за баг в openAMP/libmetal

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.