Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Написание и отладка пользовательской программы под Embedded Linux. Как стартануть?
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
transf
Добрый день всем.
Народ, может кто знает? Проблема такова:
Работаю под самим Linux'ом, но десктопным, на компе и безо всякой виртуалки. Нужно писать и отлаживать пользовательское ПО под встроенный Linux. Embedded Linux собран под одно из 2-х ядер, находящихся внутри чуда Zynq-7000, конкретно под плату zc706. Имеется инструмент Vivado, Xilinx SDK, но я в нем новичок. У меня опыт программирования MK с использованием RTOS, но это совсем другое, потому-что там исходники операционки и пользовательских задач собираются вместе. Также, и программировать под самой Linux на C/C++ для меня дело привычное (конкретно сейчас - работаю под Eclipse CDT в OpenSUSE). Но что такое работать под Embedded Linux - пока тайна и задача, к которой, не знаю, с какой стороны подойти. Что-то слышалось про GDB, но как настроить его и прикрутить к той же IDE Eclipse - не знаю. Помогите пожалуйста, как решить эту задачу? Еще такая же предстоит с IMX 6D (NXP), плюс еще и сборка ядра самой системы под него - а моих знаний для этого недостаточно. Расскажите пожалуйста, как победить? Подчеркну: в частности интересует работа с инструментом Eclipse (конкретно написание ПО и отладка). Заранее благодарю!
juvf
Для MOXA UC-8410 был мануал. там на таргете поднимался гдб-сервер, эклипс цеплялся к нему.

Сейчас настроил Eclipse для кросс-компиляции и отладки программ на Raspberry. (я сейчас в виндах, на моксе работал в дебьяне, но принцип одинаковый).

Цитата
У меня опыт программирования MK с использованием RTOS, но это совсем другое, потому-что там исходники операционки и пользовательских задач собираются вместе.
тоже был разрыв шаблона.... не понимал как это делается работает....

Вобщем с Linux для МК схема такая....
1)Если есть на МК готовая сборка линукса, то переходим на шаг 3
2)Собирается OS Linux + U-Boot + FS. Полученный образ размещается в памяти таргета. Boot МК натравливается на U-Boot. При старте МК стартует загрузчик U-Boot, который загружает ядро линукса... разворачивается FS и далее на мк живет обычный линукс, как на вашем десктопе, отдельно от ваших программ. Программы запускаются динамически также, как и на вашем десктопе. Это отличие от статических RTOS (хотя и на них, при желании, можно отделить мух от котлет).
3)Линукс запускает ваше ПО.
4)Профит!!!

Вам нужен тулчейн. Либо сами соберайте, либо скачайте с инета готовый.
Цитата
Toolchain'ы делятся на несколько типов или триплетов. Триплет обычно состоит из трёх частей: целевой процессор, vendor и OS, vendor зачастую опускается.

*-none-eabi — это toolchain для компиляции проекта работающего в bare metal.
*eabi — это toolchain для компиляции проекта работающего в какой-либо ОС. В моём случае, это Linux.
*eabihf — это почти то же самое, что и eabi, с разницей в реализации ABI вызова функций с плавающей точкой. hf — расшифровывается как hard float.


на таргете должен работать ssh

на десктопе в Eclipse делается проект с++, выберается Cross GCC
в свойствах проекта c/c++ build->settings->cross settings указываем префикс arm-linux-gnueabihf- и путь до папки с кросс-компиляторами.
можно собирать холловорд

Дебаг: теоретически..... десктоп полученный бинарник закидывает на таргет, запускает на таргете gdbserver, на десктопе arm-linux-gnueabihf-gdb цепляется к тагрету и запускает отлаживаемую программу. Далее как на десктопе.

практически: в Eclipse заходим в Debug as ..., там должно в списке быть "c/c++ remote Application". Если нет, то нужно доставить какойто плуг, не помню какой.
Далее.... на майне Remote Absolute File Path for c/c++ App:" пишем полный путь /home/pi/myProgDir/myProg
На вкладке Debugger путь до отладчика D:\SysGCC\Raspberry\bin\arm-linux-gnueabihf-gdb.exe

на таргете ставим гдб
sudo apt-get install gdbserver
или другим путем его ставим. Eclipse при дебаге будет удаленно запускать gdbserver на таргете.

Ещё.... нужно создать коннекшин, на вкладке main в окне Debug configuration кнопка New, там выбрать ssh, ip таргета, логин пароль....

Всё! Запускаем дебаг - наслаждаемся дебагом под Eclipse.

При отладке видим в консоли эклипса вывод (см скрин)

twix
Цитата(transf @ Apr 16 2018, 19:50) *
Народ, может кто знает? Проблема такова:

Опупеть, вопрос так вопрос. sm.gif

transf
Спасибо вам juvf за подробный ответ.
Pat
Смотрите в сторону Qt.
Из QtCreator все это легко делается.
Бонусом будет нормальная ИДЕ а не этот тормазнутый Еклипс.
x893
Можно и в сторону visual studio смотреть. Там тоже всё есть для этого. Кому как удобнее.
juvf
Цитата(Pat @ Apr 17 2018, 23:29) *
Смотрите в сторону Qt.
Из QtCreator все это легко делается.
Бонусом будет нормальная ИДЕ а не этот тормазнутый Еклипс.

QtCreator-у ещё нужно подрасти до Eclipse.

А что касается тормознутости - так это как любое жаваприложение - старт чуть подольше, а работа без каких-либо тормозов. Тем более автор знает еклипс. В одной ИДЭ и проекты для bare metal/RTOS на МК, и проекты для Linux.

ps Раньше был плуг Qt для Eclipse, сейчас нет. Плохо.
Tarbal
Цитата(transf @ Apr 16 2018, 22:50) *
Еще такая же предстоит с IMX 6D (NXP), плюс еще и сборка ядра самой системы под него - а моих знаний для этого недостаточно. Расскажите пожалуйста, как победить? Подчеркну: в частности интересует работа с инструментом Eclipse (конкретно написание ПО и отладка). Заранее благодарю!


Начните с того, что у представителя NXP скачайте с сайта образ для Линукса. Насколько мне известно они Yocto используют. Это такая система, которой вы можете модифицировать конфигурацию, а потом ваш компьютер долго работает и выдает вам образ диска для установки навстроеный Линукс.

Мне джавовские IDE не нравятся (Eclipse QT creator). Я ими не пользуюсь. Это совсем не обязательно. Да и жалко тратить на их изучение время. Изучайте лучше кросскомпиляцию, git, Linux API, gdb, ddd.
На работе все пользуются QT creator, но я обхожусь vim, grep, a компилируем скриптом, дебагируем gdbgui.
transf
Цитата(juvf @ Apr 17 2018, 07:01) *
Вам нужен тулчейн. Либо сами соберайте, либо скачайте с инета готовый.

Возможно проявлю невежество: не совсем понимаю какой и как сделать

Цитата(juvf @ Apr 17 2018, 07:01) *
на таргете должен работать ssh


Он работает, еще поставлен tcf-client для работы через Xilinx SDK (входит в пакет программ Vivado, собрана на том же Eclipse). Debug в среде Xilinx SDK запускается только под Windows. Под LInux не удалось пока.


Цитата(juvf @ Apr 17 2018, 07:01) *
на десктопе в Eclipse делается проект с++, выберается Cross GCC
в свойствах проекта c/c++ build->settings->cross settings указываем префикс arm-linux-gnueabihf- и путь до папки с кросс-компиляторами.
можно собирать холловорд


Собрать под обычным Eclipse (Oxygen.3 Release (4.7.3RC3)) таким образом так и не удалось. С помощью YaST поставил несколько инструментов:
cross-armv6hl-gcc48-icecream-backend
cross-armv7hl-gcc48-icecream-backend
cross-arm-binutils

В поле Properties->Settings->CrossSettings->Prefix вбил arm-linux-gnueabinf-, с помощью grep -r искал arm-linux-gnueabi* - пока не врубился какой путь до компилятора вбить.
В общем так ничего и не заработало. Ругается что не может найти arm-linux-gnueabinf-g++ (command not found). Каким образом и какие нужно поставить компиляторы?

Помогите пожалуйста новичку настроить Eclipse.
Еще: совершенно не понимаю разницу в их версиях; Oxygen, Luna, Mars и пр. Какая для работы нужна версия? Можно с любой работать или с какой-то конкретной? При отладке C/C++ программ для десктопников, между Oxygen и Luna не увидел никакой разницы.

Цитата(juvf @ Apr 17 2018, 07:01) *
Дебаг: теоретически..... десктоп полученный бинарник закидывает на таргет, запускает на таргете gdbserver, на десктопе arm-linux-gnueabihf-gdb цепляется к тагрету и запускает отлаживаемую программу. Далее как на десктопе.


до этого пока не добрался

Цитата(juvf @ Apr 18 2018, 05:57) *
QtCreator-у ещё нужно подрасти до Eclipse.

А что касается тормознутости - так это как любое жаваприложение - старт чуть подольше, а работа без каких-либо тормозов. Тем более автор знает еклипс. В одной ИДЭ и проекты для bare metal/RTOS на МК, и проекты для Linux.

ps Раньше был плуг Qt для Eclipse, сейчас нет. Плохо.


С этим согласен. Я в Qt-Creator'е работал долго, но очень не удобная отладка, невозможно просмотреть динамические массивы (динамически выделенную память) и прочие проблемы при отладке. Eclipse намного удобнее.
juvf
Цитата(transf @ Apr 24 2018, 15:07) *
не совсем понимаю какой и как сделать
может тогда не стоит браться за это? Какой именно тулчейн - не подскажу, возможно любой для кортекса-а9. Собирают тулчейн из исходников с gcc.gnu.org, но забудьте про это, по крайне мере сейчас. Ищите готовый компилятор.
Возможно поиск подскажет Первая ссылка
Цитата
The Xilinx Software Development Kit (SDK) provides
a complete environment for creating software
applications targeted for Xilinx embedded processors. It includes a GNU-based compiler toolchain
(GCC compiler, GDB debugger, utilities, and librarie
s), JTAG debugger, flash programmer, drivers for
Xilinx IPs, bare-metal software, middleware libraries
for application-specific functions, and an IDE for
C/C++ bare-metal and Linux application developm
ent and debugging. Based upon the open source
Eclipse platform, SDK incorporates th
e C/C++ Development Toolkit (CDT)
уже всё украдено

Oxygen, Luna, Mars - внешне одно и тоже. Работайте в кислороде, под марс могут каиенибудь плуги не заработать.

Цитата
В поле Properties->Settings->CrossSettings->Prefix вбил arm-linux-gnueabinf-, с помощью grep -r искал arm-linux-gnueabi* - пока не врубился какой путь до компилятора вбить.
В общем так ничего и не заработало. Ругается что не может найти arm-linux-gnueabinf-g++ (command not found). Каким образом и какие нужно поставить компиляторы?

есть пакет компиляторов gcc, g++, gbd, c++. Есть тулчейн arm-linux-gnueabinf, в него входят компиляторы arm-linux-gnueabinf-gcc, arm-linux-gnueabinf-g++, arm-linux-gnueabinf-c++. Что толку ставить префикс arm-linux-gnueabinf и искать arm-linux-gnueabinf-g++, если вы поставили тулчейн cross-armv6hl-gcc48-icecream-backend? Смотрите какие компиляторы установил этот пакет, какой у них префикс и где они расположились.


AVR
Почему никто не подсказал про "Debian ARM bootstrap" (который можно в QEMU повертеть), BuildRoot, OpenEmbedded/Yocto и прочие? Допустим, автор темы соберет простое приложение тулчейном. Дальше пойдет что-то сложнее - тогда что? Как автор будет библиотеки цеплять?

Мой путь такой - сначала на целевую плату ставим Debian ARM. Отлаживаем приложение, будь то принтингом через ssh, будь то удаленным GDB-сервером. т.е. работаем как с обычным Linux "без монитора", просто собираем софт на целевой плате (потому что там ARM) либо в QEMU ARM (установив в него тот же Debian ARM bootstrap). Когда разработка завершена - засовываем в BuildRoot/OE/Yocto.
juvf
Цитата(AVR @ Apr 27 2018, 15:42) *
Допустим, автор темы соберет простое приложение тулчейном. Дальше пойдет что-то сложнее - тогда что?
Тогда нажимем кнопку Debug в Eclipse, прога загрузиться на таргет и запуститься.
Цитата
Как автор будет библиотеки цеплять?
Хоть статически, хоть динамически. Стандартные есть в составе тулчейна. Особые библиотеки можно отдельно на десктопе кросс-компилятором собрать, можно перетянуть. Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!
AVR
Цитата(juvf @ Apr 27 2018, 17:13) *
Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!

Хорошо, не возражаю. Такое можно для достаточно примитивных проектов. На время разработки можно и вот так тяп ляп. Но когда автор темы дойдет до стадии "в продакшен" или проекты станут посерьезнее - тогда нужно будет учиться "как правильно" sm.gif
juvf
Цитата(AVR @ Apr 28 2018, 10:48) *
Хорошо, не возражаю. Такое можно для достаточно примитивных проектов. На время разработки можно и вот так тяп ляп. Но когда автор темы дойдет до стадии "в продакшен" или проекты станут посерьезнее - тогда нужно будет учиться "как правильно" sm.gif

А чем этот вариант не правильный? Собираю бинарник кросскомпилятором с динамической линковкой. Собираю из бинарника пакет без всяких либ (а можно и с либами, если на таргете инета не будет), только мой бинарь. При установке линукс сам подтянет зависимсти. Правильно как раз - это кросс-компиляция. Ваши средства сборки могут не поместиться на таргете.

Для openWrt свой пакет и нужные либы добавлял в сборку линукса. Всё делал на десктопе (отладку проги, компиляцию проги, сборку образа линукс). На выходе образ с моей прогой и нужными либами.
AVR
Цитата(juvf @ Apr 28 2018, 15:27) *
А чем этот вариант не правильный? Собираю бинарник кросскомпилятором с динамической линковкой. Собираю из бинарника пакет без всяких либ (а можно и с либами, если на таргете инета не будет), только мой бинарь. При установке линукс сам подтянет зависимсти. Правильно как раз - это кросс-компиляция. Ваши средства сборки могут не поместиться на таргете

Что значит "сборка на таргете"? Там можно NFS или большую SD карту временно задействовать. Кроме того, BuilRoot/OE/Y это и есть кросскомпиляция. Ваш рабочий вариант, но корявый и тоже требует много возни. Пакет без либ это как раз нормально, но сами либы то откуда чудесно возникнут на момент сборки? Правильно, в QEMU/ARM+proot. Не, я понимаю Ваш способ, я даже знаю некоторые так делают - и я так делал когда надо быстро тяп ляп. Но это не есть идеальный Embedded-way. Вот такие системы типа Yocto/OpenEmbedded/BuildRoot предлагают путь создания компактных прошивок со всеми необходимыми build-time и run-time компонентами. Я не настаиваю, главное чтобы автор темы был в курсе про варианты.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.