Сборка USB HID под BeagleBone

от автора


В одной из публикаций мы писали о настройке китайского USB-WiFi для Beagledone .Сегодня мы хотим привести способ сборки собственного класса управления устройством через HID-протокол. За основу была взята библиотека hidapi, а затем произведен способ кросс-компиляции под beaglebone и сборка тестовой программы для работы с USB-устройством.

Один из самых простых и надежных способов сделать управление по USB в Linux — это использование библиотеки libusb-1.0. Hidapi же является «надстройкой» над libusb, и служит для легкого подключения hid-устройств к программируемому девайсу. Если вы собираете на «чистой» системе hidapi, то придется отдельно собирать libusb и только потом собирать hidapi. В этой статье рассмотрим сборку именно hidapi. Заглянув вперед, скажем, что android ndk отказалась собирать hidapi без вмешательства.

Для начала работы мы скачали библиотеку и распаковали ее в рабочую директорию, для сборки и тестирования использовали дистрибутив Linux Mint. В распакованной папке (в нашем случае это hidapi-0.7.0) следует ознакомиться с инструкциями readme.txt. Поскольку в BeagleBone используется Linux, то мы проходим в папку hidapi-0.7.0/linux и встречаем там очередной файл readme.txt с инструкциями по сборке под Linux. Коротко, библиотека предлагает нам два варианта сборки: с использованием hid-libusb.c или с hid.c. В первом случае используется библиотека libusb, которую необходимо установить в систему. Во втором случае используется hidraw, требующая libudev-devel.

Сразу отметим, что мы попробовали собрать оба варианта; удачно собралась только hid-libusb.c, а hid.c выдавал различного рода ошибки. Далее разработчики предлагают нам поставить пакет libusb-1.0-0-dev или libudev-devel. Установив пакеты, можно собирать проект в папке linux. Выполняем make, собирается проект hidapi-0.7.0/hidtest/, и собирается как раз в нашу папку hidapi-0.7.0/linux. В командной строке можно видеть команды компилятора. Далее, суть сборки под BeagleBone заключается в подставлении кросс-компилятора вместо штатного gcc и g++ соответственно. Но есть одна тонкость, если взглянуть во-внутрь мейкфайла, то там можно увидеть

строчки

LIBS= `pkg-config libusb-1.0 libudev —libs` -lpthread
INCLUDES ?= -I../hidapi `pkg-config libusb-1.0 —cflags`

Эти строчки добавляют пути к библиотекам (includes), и задают ключи сборки библиотек(libs) динамически. Чтобы понять, что же подгружает скрипт в сборку, можно выполнить в консоли: `pkg-config libusb-1.0 libudev —libs` и `pkg-config libusb-1.0 —cflags`. При сборке софта под BeagleBone мы не меняли пути к include (там только файлы заголовков .h, причем кросс-платформенные), а либы прописывали напрямую без pkg-config. Возможно, это не самое удачное решение, но все же рабочее.

В общем виде, это выглядит

следующим образом

INCLUDEPATH+=/usr/include/libusb-1.0
LIBS += -lusb-1.0 -ludev -g
hidapi.h добавить в папку с исходниками.
gcc -Wall -g -c -I/usr/include/libusb-1.0 hid-libusb.c -o hid-libusb.o`

Исправляем мейклфайл прямым включением библиотек, прописываем кросс-компилятор и собираем программу под BeagleBone. На этом все, программа для работы с USB HID устройством готова.

ссылка на оригинал статьи http://habrahabr.ru/post/264391/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *