Разработка программ на C для Orange Pi Zero в Eclipse
Автор: Андрей Осипов
Дата: 04/04/2019
Продолжаю серию статей на тему программирования одноплатного миникомпьютера Orange Pi Zero. Сегодня расскажу как можно писать программы на Си для Orange Pi работая в IDE Eclipse из-под Windows. Так же этот метод будет работать в Eclipse из-под Linux.
Первое, что необходимо сделать, это скачать тулчейн для кросскомпиляции из-под Windows: http://gnutoolchains.com/raspberry/
Я скачивал себе raspberry-gcc4.6.3.exe
Не обращаем внимания, что тулчейн предназначен для Raspberry – платформа одна и та же.
Запускаем скачанный пакет и устанавливаем в каталог C:\SysGCC\Raspberry, который программа предлагает использовать по умолчанию.
Я предполагаю, что со средой разработки Eclipse читатель уже знаком. Далее я покажу как создать проект в среде Eclipse Neon 3.
Запускаем Eclipse и создаем новый проект: File->New->C Project
Тип проекта выбираем Empty Project, а тулчейн Crocc GCC:
Имя проекта задаем произвольное. Жмем «Next» пока не дойдем до окна настроек компилятора Cross GCC Command. Здесь необходимо задать префикс и путь к компилятору.
Префикс задаем arm-linux-gnueabihf-
Путь к компилятору C:\SysGCC\Raspberry\bin
В Project Explorer появится новый проект. Добавляем в проект файл-исходник main.c, для чего вызываем меню File->New->Source File
Добавляем код следующего содержимого в созданный файл main.c:
#includeint main(int argc, char **argv) { printf("Hello, world!\r\n"); return 1; }
Далее запускаем компиляцию проекта CTRL+B.
Если вы сделали все правильно, то должны увидеть в консоли текст примерно такого содержания:
13:44:44 **** Build of configuration Debug for project First **** make all 'Building file: ../main.c' 'Invoking: Cross GCC Compiler' arm-linux-gnueabihf-gcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.o" -o "main.o" "../main.c" 'Finished building: ../main.c' ' ' 'Building target: First' 'Invoking: Cross GCC Linker' arm-linux-gnueabihf-gcc -o "First" ./main.o 'Finished building target: First' ' ' 13:44:45 Build Finished (took 428ms)
Если при компиляции возникли ошибки, то проверьте нет ли ошибок в коде во-первых. А во-вторых проверьте правильно ли вы задали префикс и путь к компилятору. Эти настройки можно найти в меню Settings. Найти его можно так Project->Properties->C/C++ Build->Settings->Cross Settings
Если все скомпилировалось, то переходим к следующему шагу – настройке удаленной отладки.
Для начала создадим соединение с удаленной машиной по SSH. Для этого необходимо открыть инструмент Remote Systems. Найти его можно через меню Window->Show View->Other…->Remote Systems->Remote Systems.
В появившемся окне Remote Systems создаем новое соединение ПКМ->New->Connection
Тип системы – Linux
В качестве имени хоста указываем IP-адрес Orange Pi:
В окне Files выбираем конфигурацию ssh.files:
В окне Processes выбираем конфигурацию processes.shell.linux:
В окне Shells выбираем конфигурацию ssh.shells:
По окончанию настройки в окне Remote Systems появится новое соединение, названием которого является IP-адрес хоста.
Разворачиваем ветку Sftp Files->My Home и система запросит пароль для доступа. Здесь необходимо ввести логин и пароль те, которые используются для доступа через консоль.
Чтобы каждый раз не нужно было вводить пароль, установите галочку Save password.
Теперь в окне Remote Systems мы можем работать с файловой системой Orange Pi.
Далее перейдем к настройке отладчика. На удаленной машине должен быть установлен GDB-сервер. Введите команду:
which gdbserver
Если в ответ Вы увидите пустую строку, то gdb-сервер не установлен. Устанавливается он командой:
sudo apt install gdbserver
Повторный ввод команды which gdb вернет каталог, куда установлен сервер /usr/bin/gdbserver
Вернемся в Eclipse и настроим отладочный профиль вызвав меню Run->Debug Configurations…
Делаем двойной клик ЛКМ на элементе списка под именем C/C++ Remote Application.
После этой операции откроется окно настроек, в котором уже будет выбран отлаживаемый проект и путь к бинарному исполняемому файлу. Нам необходимо создать удаленное соединение и указать каталог на удаленной машине, куда будет закачиваться файл программы. Нажимаем кнопку New. Тип соединения выбираем SSH.
В окне New Connection задаем произвольное имя соединения, IP-адрес хоста, логин пользователя и его пароль. Метод авторизации выбираем по паролю.
Далее указываем абсолютный удаленный путь к рабочему каталогу (куда будет закачиваться программа) Remote Absolute File Path for C/C++ Application. У себя я указал такой путь: /home/andrey/public/www/cgi-bin/First
Жмем Apply и переходим на вкладку Debugger. Здесь необходимо указать путь к gdb-отладчику из тулчейна, который мы вначале устанавливали.
Убеждаемся, что на вкладке Gdbserver Settings в поле Gdbserver Path указано значение gdbserver. Если это не так, то исправляем.
После всех этих процедур нажимаем Apply и Debug. Должен запустить процесс отладки.
Возможно появление такого окна:
Здесь спрашивается хочет ли пользователь переключить в отладочный режим Eclipse (отладочную перспективу). Ставим галочку и нажимаем Yes, чтобы в дальнейшем просто происходило переключение в отладочный режим.
Дальше программа остановится на первой строке в функции main(). Если запустить программу на исполнение (F8) то в консоли можно увидеть заветную строку «Hello, world!».
Программу можно также запустить не входя в режим отладки через меню Run->Run History или из панели инструментов.
Программу естественно можно запустить из терминала. Для начала убедимся, что она находится в нашем каталоге:
ls ~/public/www/cgi-bin/
Моя программа называется First. Запускаем программу:
~/public/www/cgi-bin/First
Результат должен быть тот же: вывод строки «Hello, world!»
На этом завершаю сегодняшнюю статью. Вопросы можно задавать в комментариях. В следующий раз расскажу как можно управлять светодиодом с веб-страницы (через веб-интерфейс).
- Войдите или зарегистрируйтесь, чтобы отправлять комментарии
Комментарии
Отличная статья! (Есть вопрос)
Все сделал по вашей статье.. Но как сделать "clean" ?
После команды "Clean project" выдает следующее:
make clean
rm -rf ./main.o ./main.d Alarm_GSM_OPiZero_Test
process_begin: CreateProcess(NULL, rm -rf ./main.o ./main.d Alarm_GSM_OPiZero_Test, ...) failed.
make (e=2): Не удается найти указанный файл.
make: [clean] Error 2 (ignored)
Все получилось!
Спасибо за очень подробную статью!, то что нужно для начинающих
Просьба написать статью
Андрей, не могли бы вы написать статью как использовать libmodbus с eclipse и usb serial ?
Уточнение
Отличная статья, для Raspberry PI всё работает.
Есть уточнение: На Orange PI работать не будет
Required packages: apt-get install libc6-dbg(С)
там одним gdbserver не отделаться.
UPD:
На orange Pi 3 с Allwinner H6 работать не будет.
Ссылка на тулчайн - не валидна, там больше нет сайта. Брал с распбиана, но там уже нет той версии.
Sungsi в Orange Pi используйт для сборок тулчайны Linaro.
Таким образом - всё, что в статье - работает на малине аж бегом. С родным тулчейном всё хорошо.
Но абсолютно не работает на Orange Pi в настоящий момент.
Eclipse для Orange Pi
Подскажите пож, где взять raspberry-gcc4.6.3.exe??? На родном сайте версии давно убежали вперед, на версии 6 эклис компилит приложение, но оно не запускается на плате.