реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Написание и отладка пользовательской программы под Embedded Linux. Как стартануть?, Не могу понять, с чего начать и как сделать
transf
сообщение Apr 16 2018, 18:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-04-09
Пользователь №: 47 192



Добрый день всем.
Народ, может кто знает? Проблема такова:
Работаю под самим 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 (конкретно написание ПО и отладка). Заранее благодарю!
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 17 2018, 04:01
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 232
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Для 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.

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


Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 
Go to the top of the page
 
+Quote Post
twix
сообщение Apr 17 2018, 05:55
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 312
Регистрация: 4-11-15
Пользователь №: 89 174



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

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

Go to the top of the page
 
+Quote Post
transf
сообщение Apr 17 2018, 08:45
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-04-09
Пользователь №: 47 192



Спасибо вам juvf за подробный ответ.
Go to the top of the page
 
+Quote Post
Pat
сообщение Apr 17 2018, 18:29
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 27-05-05
Из: Энергодар
Пользователь №: 5 480



Смотрите в сторону Qt.
Из QtCreator все это легко делается.
Бонусом будет нормальная ИДЕ а не этот тормазнутый Еклипс.
Go to the top of the page
 
+Quote Post
x893
сообщение Apr 17 2018, 18:32
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 265
Регистрация: 27-10-08
Из: Планета Земля
Пользователь №: 41 226



Можно и в сторону visual studio смотреть. Там тоже всё есть для этого. Кому как удобнее.
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 18 2018, 02:57
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 232
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



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

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

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

ps Раньше был плуг Qt для Eclipse, сейчас нет. Плохо.
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Apr 20 2018, 01:44
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 341
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(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.
Go to the top of the page
 
+Quote Post
transf
сообщение Apr 24 2018, 10:07
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 45
Регистрация: 5-04-09
Пользователь №: 47 192



Цитата(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 намного удобнее.

Сообщение отредактировал transf - Apr 24 2018, 11:42
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 24 2018, 19:38
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 232
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(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? Смотрите какие компиляторы установил этот пакет, какой у них префикс и где они расположились.


Go to the top of the page
 
+Quote Post
AVR
сообщение Apr 27 2018, 10:42
Сообщение #11


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 319
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

Мой путь такой - сначала на целевую плату ставим Debian ARM. Отлаживаем приложение, будь то принтингом через ssh, будь то удаленным GDB-сервером. т.е. работаем как с обычным Linux "без монитора", просто собираем софт на целевой плате (потому что там ARM) либо в QEMU ARM (установив в него тот же Debian ARM bootstrap). Когда разработка завершена - засовываем в BuildRoot/OE/Yocto.


--------------------
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 27 2018, 14:13
Сообщение #12


Профессионал
*****

Группа: Свой
Сообщений: 1 232
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(AVR @ Apr 27 2018, 15:42) *
Допустим, автор темы соберет простое приложение тулчейном. Дальше пойдет что-то сложнее - тогда что?
Тогда нажимем кнопку Debug в Eclipse, прога загрузиться на таргет и запуститься.
Цитата
Как автор будет библиотеки цеплять?
Хоть статически, хоть динамически. Стандартные есть в составе тулчейна. Особые библиотеки можно отдельно на десктопе кросс-компилятором собрать, можно перетянуть. Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!
Go to the top of the page
 
+Quote Post
AVR
сообщение Apr 28 2018, 05:48
Сообщение #13


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 319
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



Цитата(juvf @ Apr 27 2018, 17:13) *
Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!

Хорошо, не возражаю. Такое можно для достаточно примитивных проектов. На время разработки можно и вот так тяп ляп. Но когда автор темы дойдет до стадии "в продакшен" или проекты станут посерьезнее - тогда нужно будет учиться "как правильно" sm.gif


--------------------
Go to the top of the page
 
+Quote Post
juvf
сообщение Apr 28 2018, 12:27
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 232
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



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

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

Для openWrt свой пакет и нужные либы добавлял в сборку линукса. Всё делал на десктопе (отладку проги, компиляцию проги, сборку образа линукс). На выходе образ с моей прогой и нужными либами.
Go to the top of the page
 
+Quote Post
AVR
сообщение May 8 2018, 08:16
Сообщение #15


фанат Linux'а
*****

Группа: Свой
Сообщений: 1 319
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008



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

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


--------------------
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th August 2018 - 15:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01105 секунд с 7
ELECTRONIX ©2004-2016