Visual Studio 2017. Написание и отладка приложений для Onion Omega2

Onion Omega2 — это одноплатный компьютер на базе MIPS-процессора, имеющего следующую периферию: Wi-Fi, Ethernet 10\100 Мбит, UART, PWM, I2C, SPI, USB, SDIO и GPIO. В качестве ОС используется Linux LEDE (Linux Embedded Development Environment), базирующийся на OpenWRT.

B87-0

Статья-мануал о том, как начать писать и отлаживать программы на С\С++ для Omega2 в Visual Studio 2017. Если интересно, прошу под кат:

Выбор версии LEDE и её обновление

В качестве отладочной платы у меня плата собственной разработки с модулем Omega2S+ (максимальная комплектация с 32 Мбайт памяти, 128 Мбайт ОЗУ и SDIO для подключения MicroSD карт). При первом включении на ней будет старый билд LEDE, и его требуется обновить, вот тут есть разные пути. Рассмотрим как различие версий ОС (стабильные и девелоперские), так и пути обновления.

B87-1

Итак, вначале необходимо определиться с установленной версией дистрибутива LEDE в модуле, тут я пришёл к следующим вариантам:

  1. Выбираем версию v0.2.0 b177, основная причина — на ней нормально работает вывод звука по I2S, и если у вас внешний ЦАП именно I2S, то более новые версии дистрибутива имеют поломанный I2S драйвер (и его не чинят, более того, советуют подключать USB ЦАП и не париться, что я считаю «индусским бредом»), более того, как я ни пытался, я так и не смог заставить корректно Visual Studio работать с этой версией по ssh (как встроенному, так и дополнительно установленному open-ssh) — то не подключалось, то sftp не работало…
  2. Обновляем до последней стабильной версии — v0.2.2 b200тут уже поломан I2S, но проблем с подключением нет, и остальное вполне корректно работает;
  3. Выбираем последнюю девелоперскую версию — на ваш страх и риск, к ней вроде бы подключалось всё нормально, но гарантий никаких.

Я же начал с 1-го варианта, просто скачал с официального сайта omega2/images/ следующий билд — omega2p-v0.2.0-b177.bin (именно «p» в конце имени для моей версии модуля Omega2s+, для обычных Omega2s необходимо скачивать omega2-v0.2.0-b177.bin), скидываем его на флешку с файловой системой FAT32, подключаем флешку к плате.

Запускаем putty и выбираем COM порт платы (скорость 115200):

B87-2

Пустота в терминале:

B87-3

Нажимаем Enter и терминал приветствует нас, теперь мы можем вводить команды (не обращайте внимания на версию):

B87-4

Заходим на флешку:

cd /tmp/mounts/USB-A1

И запускаем процедуру ручного обновления до указанного образа:

sysupgrade omega2p-v0.2.0-b177.bin

Да, можно проверить, насколько актуален текущий (работающий) в модуле LEDE, следующей командой:

oupgrade -c

И на этом первый вариант для меня закончился, т. к. я несколько вечеров просидел, пытаясь понять и решить, почему Visual Studio вообще никак не подключается к встроенному ssh (как будто доступа нет, хотя putty подключается без проблем), а также к дополнительно установленному open-ssh на другом порту (с различными конфигурациями последнего) не подключается или не может скачать\залить исходники.

Поэтому, вдоволь намучившись, я уже пошел по второму варианту, просто обновив LEDE до последнего стабильного билда следующей командой:

oupgrade

Примечание: Все дальнейшие действия в статье будут описаны для v0.2.2 b200 как последнего официального стабильного билда LEDE.

И если вы любите риск, то 3-й вариант для вас — команда для обновления на самую последнюю (нестабильную) версию:

oupgrade -l

И да, посмотреть текущую версию в модуле можно командой:

oupgrade -v

Подготовка LEDE

Определившись и обновив LEDE, нам необходимо расширить память, чтобы установить компилятор, отладчик и т. д., а также иметь место для экспериментов.

Вводим команду:

df -h

B87-5

И видим, что в /overlay у нас свободно места чуть более 21 Мбайт, чего не хватает даже на установку GCC, печально. Место же можно расширить 2-мя способами для Omega2S+ — microSD-флешкой или USB-флешкой (для обычной версии Omega2S — только USB), я на плате развёл всё для MicroSD флешек и USB терять не хочу, поэтому буду показывать на примере MicroSD (всё можно также посмотреть в официальном гайде с небольшими неточностями тут — Booting from External Storage).

Вначале обновляем репозитории:

opkg update

Устанавливаем набор утилит для работы с различными файловыми системами:

opkg install e2fsprogs

Демонтируем подключенную флешку:

umount /tmp/mounts/SD-P1

Форматируем её на файловую систему EX4:

mkfs.ext4 /dev/mmcblk0p1

B87-6

Создаём ссылку и монтируем флешку:

mkdir /mnt/mmcblk0p1

mount /dev/mmcblk0p1 /mnt/

Перемещаем /overlay в смонтированную флешку:

tar -C /overlay -cvf — . | tar -C /mnt/ -xf —

umount /mnt/

Ставим утилиту для автоматического подключения флешки при запуске:

opkg install block-mount

Генерируем fstab для подключенной флешки:

block detect > /etc/config/fstab

Открываем конфигурацию fstab в редакторе vi (да, мануал по работе с редактором vi):

vi /etc/config/fstab

Нажимаем «i» для перехода в текстовый режим. Теперь находим следующую строку:

option target ‘/mnt/mmcblk0p1’

И переписываем на:

option target ‘/overlay’

А также в строке:

option enabled ‘0’

Меняем 0 на 1:

option enabled ‘1’

Нажимаем «ESC» для перехода в режим команд. Набираем:

:wq

И жмём «Enter«. Всё готово. Перезагружаем модуль командой:

reboot

После загрузки можно проверить память:

df -h

B87-7

Теперь в /overlay должны появиться гигабайты пустого места, можно переходить к следующим шагам.

Установка компилятора, отладчика

Для установки утилит компилятора, отладчика и прочего необходимо сначала зайти в конфигурацию источников пакетов командой:

vi /etc/opkg/distfeeds.conf

Далее необходимо раскоментировать следующие строки:

src/gz reboot_base http://downloads.lede-project.org/snapshots/packages/mipsel_24kc/base
src/gz reboot_packages http://downloads.lede-project.org/snapshots/packages/mipsel_24kc/packages
Примечание: ссылки могут отличаться в других версиях, ключевые слова здесь — reboot_base и reboot_packages.

B87-8

Теперь обновляем доступные пакеты к установке командой:

opkg update

Ставим компилятор GCC:

opkg install gcc

Ставим утилиты Make:

opkg install make

Ставим GDB-отладчик:

opkg install gdb

Если необходимо, то можно поставить GDB-сервер для отладки, но в моём случае это не требуется:

opkg install gdbserver

Также ставим упаковщик ZIP-архивов (понадобится для скачивания заголовков исходников):

opkg install zip

А также утилиту TTY для работы с одним терминалом из нескольких процессов (необходимо для отладки через Visual Studio):

opkg install coreutils-tty

Вот вроде и всё, Omega2 готова к подключению, компиляции и запуску отладки первого проекта!

Первый проект

Создаём Console Application из раздела Cross Platform (необходимо для этого установить утилиты для разработки под Linux, подробнее можно прочитать в Установка WSL и тестовый проект в Visual Studio 2017):

B87-9

Заходим в свойства проекта и проверяем параметры отладки (отладка посредством GDB):

B87-10

Да, тут же создаём новую архитектуру платформы — MIPS, под которую будет проект (нажимаем New… и можно скопировать настройки из ARM64):

B87-11

Да, ещё можно изменить удалённую директорию (в данном случае в папке пользователя на Omega2 будет создана папка projects, и в ней уже папка проекта), куда будут скопированы исходники и произведена компиляция:

B87-12

Остальные настройки проекта можно пока не трогать, для старта значения по умолчанию подходят. Далее добавляем исходники к проекту (в моём случае это работа с GPIO и I2C):

B87-13

И в main.c (или main.cpp, я просто решил создать чисто С проект) добавляем код, который будем отлаживать (хотя для начала вполне хватит вывода строки посредством printf):

B87-14

Здесь я вывожу строку приветствия в консоль, настраиваю GPIO на выход (для светодиода RGB) и на вход (для одной кнопки), инициализирую OLED по I2C, в бесконечном цикле меняю по коду Джонсона значение светодиодов и вывожу его на дисплей.

Номера GPIO я беру из схемы на отладку для Onion Omega2S (собственной разработки, но RGB-светодиод и I2C OLED подключёны аналогично официальным платам):

B87-15

Не забываем, что светодиоды подключены катодами к GPIO (зажигаем 0):

B87-16

И для OLED есть возможность изменить его I2C адрес (по умолчанию аналогичен официальным платам — 0x3C):

B87-17

Когда проект создан и добавлены исходники для первой пробы, требуется теперь в Connection Manager создать подключение к нашей плате. Заходим в опции:

B87-18

Далее заходим в Cross Platform -> Connection Manager :

B87-19

Указываем IP, порт и имя пользователя с паролем (по умолчанию это root \ onioneer, да, будем под рутом… но можно создать отдельного пользователя для этих целей):

B87-20

После успешного подключения будет попытка скачать заголовки:

B87-21

Но если зайти в папку кеша (%userprofile%\AppData\Local\Microsoft\Linux\HeaderCache\1.0\*random*\) на ПК, с которого мы подключались, то можно увидеть следующую картину:

B87-22

Заголовки не скачаны и, соответственно, в проекте никакие дефайны и заголовочные файлы автоматом не будут доступны через IntelliSence. Надо исправлять!

Самый простой путь — это задать вариант скачивания исходников в виде архива (для чего ранее и устанавливали zip). Для этого в папке заголовков, в её корне находим файл settings.xml.unused и переименовываем его в settings.xml, тем самым разрешая применение настроек из него для Connection Manager:

B87-23

Теперь открываем его и меняем в параметр syncMethod на sftp_ssh:

B87-24

Открываем опять Connection Manager и жмём обновить:

B87-26

Вуаля:

B87-25

Всё на месте!

Вот и всё, теперь можете нажимать на запуск отладки на выбранном IP:

B87-26

Visual Studio подключится, скопирует исходники, откомпилирует и запустит отладку. Всё аналогично WSL. На гифке выше пример запуска приложения и остановка по breakpoint, выполнение на реальном железе приостанавливается, а также в окне Autos отображаются значения локальных переменных, и можно отлаживаться как с обычным приложением.

Спасибо, что прочитали! Удачного кодинга. ;)

Ссылки

Реклама

Добавить комментарий

Please log in using one of these methods to post your comment:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s