Разработка программ на 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:

#include 

int 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 не отделаться.

На orange Pi 3 с Allwinner H6 работать не будет.
Ссылка на тулчайн - не валидна, там больше нет сайта. Брал с распбиана, но там уже нет той версии.
Sungsi в Orange Pi используйт для сборок тулчайны Linaro.

Таким образом - всё, что в статье - работает на малине аж бегом. С родным тулчейном всё хорошо.

Но абсолютно не работает на Orange Pi в настоящий момент.