Перейти к содержанию

    

Написание и отладка пользовательской программы под Embedded Linux. Как стартануть?

Добрый день всем.

Народ, может кто знает? Проблема такова:

Работаю под самим 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 (конкретно написание ПО и отладка). Заранее благодарю!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

post-49045-1523937348_thumb.png

post-49045-1523937388_thumb.png

post-49045-1523937399_thumb.png

post-49045-1523937921_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Народ, может кто знает? Проблема такова:

Опупеть, вопрос так вопрос. :)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрите в сторону Qt.

Из QtCreator все это легко делается.

Бонусом будет нормальная ИДЕ а не этот тормазнутый Еклипс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно и в сторону visual studio смотреть. Там тоже всё есть для этого. Кому как удобнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Смотрите в сторону Qt.

Из QtCreator все это легко делается.

Бонусом будет нормальная ИДЕ а не этот тормазнутый Еклипс.

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Еще такая же предстоит с IMX 6D (NXP), плюс еще и сборка ядра самой системы под него - а моих знаний для этого недостаточно. Расскажите пожалуйста, как победить? Подчеркну: в частности интересует работа с инструментом Eclipse (конкретно написание ПО и отладка). Заранее благодарю!

 

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

 

Мне джавовские IDE не нравятся (Eclipse QT creator). Я ими не пользуюсь. Это совсем не обязательно. Да и жалко тратить на их изучение время. Изучайте лучше кросскомпиляцию, git, Linux API, gdb, ddd.

На работе все пользуются QT creator, но я обхожусь vim, grep, a компилируем скриптом, дебагируем gdbgui.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Вам нужен тулчейн. Либо сами соберайте, либо скачайте с инета готовый.

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

 

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

 

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

 

 

на десктопе в 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 не увидел никакой разницы.

 

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

 

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

 

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

 

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

 

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

 

С этим согласен. Я в Qt-Creator'е работал долго, но очень не удобная отладка, невозможно просмотреть динамические массивы (динамически выделенную память) и прочие проблемы при отладке. Eclipse намного удобнее.

Изменено пользователем transf

Поделиться сообщением


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

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Допустим, автор темы соберет простое приложение тулчейном. Дальше пойдет что-то сложнее - тогда что?
Тогда нажимем кнопку Debug в Eclipse, прога загрузиться на таргет и запуститься.

Как автор будет библиотеки цеплять?
Хоть статически, хоть динамически. Стандартные есть в составе тулчейна. Особые библиотеки можно отдельно на десктопе кросс-компилятором собрать, можно перетянуть. Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Я перетянул линуксовые библиотеки из таргета на виндовый десктоп, подключил их к проекту - профит!!!

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

Поделиться сообщением


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

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

 

Для openWrt свой пакет и нужные либы добавлял в сборку линукса. Всё делал на десктопе (отладку проги, компиляцию проги, сборку образа линукс). На выходе образ с моей прогой и нужными либами.

 

Поделиться сообщением


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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти