Libusb linux как установить
Библиотека сайта rus-linux.net
На главную -> MyLDP -> Электронные книги по ОС Linux
Beyond Linux From Scratch. Version 2011-12-30 | ||
Назад | 8. Библиотеки общего назначения | Вперед |
Пакет libusb-1.0.8
Знакомимся с пакетом libusb
В пакете libusb находится библиотека, используемая некоторыми приложениями для доступа к устройствам USB.
Известно, что пакет правильно собирается и работает на платформе LFS-7.0.
Информация о пакете
- Загрузка (HTTP): http://downloads.sourceforge.net/libusb/libusb-1.0.8.tar.bz2
- Загрузка (FTP): ftp://anduin.linuxfromscratch.org/BLFS/svn/l/libusb-1.0.8.tar.bz2
- Контрольная сумма MD5: 37d34e6eaa69a4b645a19ff4ca63ceef
- Размер загружаемого пакета: 331 KB
- Оценочный размер требуемого дискового пространства: 5 MB
- Оценочное время сборки: 0,1 SBU
Зависимости пакета libusb
Необязательные (необходимы для сборки документации по API)
Установка пакета libusb
Установите пакет libusb с помощью следующих команд:
Если установлен пакет Doxygen и вы хотите собрать документацию API, введите следующую команду:
В этом пакете набор тестов отсутствует.
Теперь в роли пользователя root выполните:
Если вы собрали документацию API, установите ее в роли пользователя root с помощью следующих команд:
Конфигурирование пакета Libusb
Чтобы получить доступ к «настоящим» устройствам USB (тем, которые драйвером запоминающих устройств не определяются как диск), в ядре должна быть соответствующая поддержка. Проверьте конфигурацию вашего ядра в меню Device Drivers => USB support => Support for Host-side USB (Драйвера устройств => Поддержка USB => Хост-поддержка USB). Там же вы можете выбрать для устройства USB любой аппаратный драйвер.
Подробности настройки устройств USB в разделе «Об устройствах USB» .
Описание пакета
Установленные программы: Нет
Установленные библиотеки: libusb-1.0.
Установленные директории: /usr/include/libusb-1.0 и /usr/share/doc/libusb-1.0.8
библиотеки, в которой находятся функции C для доступа к аппаратным возможностям USB
Перевод сделан с варианта оригинала, датированного 2011-11-15 23:41:27 +0000
Обмениваемся данными с USB девайсом при помощи libusb
LibUsb — библиотека для языка C, которая позволяет обмениваться данными с устройствами по протоколу usb.
У меня есть устройсво на базе STM32F407VGT6 микроконтроллера.
Давайте рассмотрим механизм посылки и принятия данных.
Прежде всего стоит отметить, что данные можно слать разными способами. Мы рассмотрим асинхронную передачу прерывания ( interrapt transfer )
Этот тип передачи позволяет передавать небольшие объёмы данных без получения подтверждения о получении. Тобеш послали и забыли))
При работе с libusb следует помнить, что его нужно инициализировать:
Теперь получим handle устройства:
Я считаю, что вы знаете Vendor ID и Product ID вашего устройства. Эти данные редко меняются, поэтому я задал их define`ом.
Если устройство не обнаружено handle = NULL :
Кроме того, если система уже захватила контроль над устройством его нужно у неё забрать! Ато малоли чего она туда нашлёт.
DEV_INTF — интерфейс устройства. Он тоже статичен, а указывать нужно из-за того, что он может быть не один.
Такие параметры удобно узнавать при помощи команды
Теперь захватываем интерфейс:
Теперь можно читать данные. У меня «реализация usb мышки» такчто читаем по 4 байта:
Всё это можно делать в бесконечном цикле. Для наглядности.
В первой строке мы читаем данные в буфер buf из устройства handle, через точку EP_IN (для мыши это 0x81).
Читаем DATA_SIZE байт. Причём int ret получит число реально считанных байт. А ждать данные мы будем не больше 1000мс.
Буфер я объявлял так:
Самое забавное, что для посылки данные делается всё точно также, за исключением выбора конечной точки EP_OUT (у мыши 0x01 но смысла туда чтот слать я не вижу). Ну и конечно буфер перед этим нужно заполнить.
Для компиляции в linux нужно прилинковать библиотеку usb-1.0.
libusb-0.1.8
Введение в libusb
Пакет libusb содержит библиотеку, используемую некоторыми приложениями для доступа к USB устройствам.
Информация о пакете
Контрольная сумма: 75655870fb7bb661e6fbd57cbfe81bb2
Требуемое дисковое пространство: 4.5 MB (включая установку HTML документации)
Расчетное время сборки: 0.25 SBU
Зависимости libusb
Опционально
OpenJade-1.3.2 и DocBook SGML DTD-3.1 (оба необходимы для сборки HTML документации)
Установка libusb
Установим libusb запуском следующих команд:
А теперь, как пользователь root:
Если вы собрали HTML документацию, установите ее запуском следующих команд:
Описание команд
libtoolize -f : Эта команда заставит сборку использовать систему установленных средств libtool , так что разделяемые библиотеки создаются правильно.
autoreconf -f : Эта команда пересоздаст некоторые из средств Autotools, необходимые для запуска libtoolize .
—disable-build-docs: Этот ключ выключит сборку документации. Если вы захотите собрать документацию, вам может понадобиться удалить описание каталога OpenSP из системы каталогов SGML . Используйте следующую команду перед сборкой пакета для выполнения этого:
Конфигурация libusb
libusb требует файловую систему ядра usbfs, подмонтированную в /proc/bus/usb. Приложения требуют, чтобы файлы в этой директории были доступны пользователю, иногда и для чтения и для записи. Для ограничения доступа к USB устройствам, убедитесь, что группа usb присутствует в вашей системе. Если необходимо, создайте группу usb используя следующую команду:
Убедитесь, что у вас поддержка “ файловой системы USB устройств ” вкомпилирована прямо в ядро или выполнена в виде модуля (наличие модуля “ usbcore ” в файле /etc/sysconfig/modules). У вас должно быть содержимое, похожее на строку ниже, в файле /etc/fstab Установленные программы: usb-config
Короткое описание
скрипт, предоставляющий правильные флаги для компилятора и компоновщика программ, использующих libusb.
библиотеки, содержащие функции C для доступа к USB устройствам.
Последнее обновление 2005-02-06 14:09:05 -0700
LibUSB
Напишем простейшее приложение на стороне хоста, работающее с USB устройством. В качестве устройства, будем использовать мышь USB, хотя устройство может быть любым. Примеры программ для Windows и Linux. Для Windows программа создана в среде Microsoft Visual C++ 6.0 , а для Linux на С для GCС.
Проблема написания приложения для устройства USB, состоит в необходимости создания драйвера. Создание драйвера – задача не рядовая. Получается, что для изучения USB, требуется предварительно научиться писать драйвера для ОС.
Другой подход – это использовать существующие драйвера ОС. Уже говорилось о USB устройствах, имеющих архитектуру, относящуюся к определенным стандартизованным классам. Для большинства таких типов устройств уже имеются драйвера в составе установленной ОС. Например, мышь относится к классу HID , для нее имеются стандартные драйвера в ОС. Такой подход имеет право на жизнь. Через API, из своей программы обращаетесь к ОС, а она через драйвер к USB устройству. Но тогда создаваемое USB устройство должна поддерживать протокол HID. Это достаточно сложная надстройка над базовой функциональностью USB.
Оба этих метода не подходят для начинающих изучать USB. Так как быть? К счастью для новичков, имеется библиотека libusb. Первоначально она создавалась для Linux, теперь имеются порты и для Windows. Уже известная утилита lsusb использует библиотеку libusb. Эта библиотека позволяет писать прикладные программы, напрямую обращающиеся к USB устройству, устраняя необходимость использования специальных драйверов ОС.
Для работы нужно установить libusb-win32 для Windows. Эта библиотека в Windows может применяться в двух разных режимах, как обыкновенный драйвер устройства и как фильтрующий драйвер для уже установленных устройств.
В первом случае, необходимо удалить USB устройство, все его драйвера и скрытые записи об установке как описывалось ранее, если они конечно имелись. При подключении USB устройства Windows попросит драйвер, выдать ей файл INF , который заранее заготовили для этого устройства. В составе пакета поставляется нехитрый мастер, с помощью которого, легко создать требуемый INF файл. Теперь при всяком подключении разработанного устройства, она будет использовать libusb-win32 как полноценный драйвер. Из своей прикладной программы, обращаясь к libusb-win32, будете работать с разработанным USB устройством.
Второй вариант, как фильтрующий драйвер. В этом случае никаких файлов INF не нужно, в этом режиме можно работать с любым USB устройством, подключенным к хосту, выбирая их по кодам производителя. Эти устройства могут быть сконфигурированы, и иметь подключенные драйвера. Есть некоторые ограничения, нельзя менять конфигурацию этих USB устройств, но в этом необходимость возникает редко. Такой режим больше рекомендуется для экспериментов при разработке. Не исключена возможность нарушения работы системы.
С сайта sourceforge.net скачайте бинарный архив, в мо.м случае, это libusb-win32-bin-1.2.6.0.zip . Архив содержит все необходимое для установки библиотеки и для разработки, в том числе утилиты для тестирования и конфигурирования.
В подкаталоге bin архива, содержатся подкаталоги для всех основных архитектур Windows. У меня Windows XP SP3 , поэтому используем каталог x86. Файл libusb0_x86.dll переименовываем в libusb0.dll и копируем в %SystemRoot%\system32. Файл libusb0.sys копируем в %SystemRoot%\system32\drivers. Подключаем мышь USB, с которой будем экспериментировать, затем запускаем установщик фильтра install-filter-win.exe и выбираем нашу мышь из списка. Далее запускаем тестовую программу testlibusb-win.exe , если все правильно работает, должны увидеть в окне дескрипторы мыши. Устанавливать фильтр нужно единожды, сведения о USB устройствах, с которыми предполагается работать, запоминаются.
Создайте шаблонный, консольный проект «Hello, world!» в MSVC. Затем нужно настроить этот проект, подключить заголовочный файл и статическую библиотеку среды libusb-win32. В мо.м случае, архив распакован в C:\libusb-win32 , в подкаталоге include находится заголовочный файл lusb0_usb.h , а в подкаталоге C:\libusb-win32\lib\msvc находится файл библиотеки libusb.lib. Там же можно обнаружить каталоги с библиотеками для 64-разрядных платформ. В главном меню выбирается, «Project -> Settings…» , вкладка C/C++ , в поле ввода «Additional include directories» , ввести путь к каталогу, где лежит заголовочный файл lusb0_usb.h . На вкладке «Link» , в поле «Object/library modules» , через пробел добавить библиотеку libusb.lib , а в поле ввода «Additional library path», добавить путь к этой библиотеке. Посмотрите коды производителя мыши USB и подставьте в текст программы, затем откомпилируйте. Программа открывает USB устройство по кодам производителя и продукта, считывает некоторые строковые дескрипторы и выводит на экран. Запускать из командной строки. Имея работающий шаблон легко создать программу с графическим интерфейсом. Функции usb_find_busses и usb_find_devices находят все шины хоста и все устройства на шинах и сохраняют эти сведения во внутренних структурах данных. Функция usb_get_busses возвращает ссылку на глобальную структуру, где хранятся сведения о шинах, устройствах на шинах и дескрипторах этих устройств. Описание функций библиотеки libusb дано в приложении. На момент написания материала, существовали 2 версии библиотеки, версия 0.1 и версия 1.0 . Они достаточно сильно различаются, libusb-win32 перенесена из версии 0.1 для Linux. На рисунке 4 приведены формы проекта MSVC, для настройки среды разработки с библиотекой libusb. С сайта vk.com/protocols можно скачать готовый проект для Visual C 6.0. для Windows. В Ubuntu для программирования требуется установить пакет libusb-dev, или установить библиотеку из исходных кодов. Для понимания работы с библиотекой необходимо знание работы со структурами и со списками структур на языке C. Для компилирования необходимо иметь на машине компилятор GCC. На мо.м компьютере была установлена версия библиотеки libusb — 0.1.12. Утилитой lsusb, посмотрите коды производителя и продукта своей мыши или иного устройства, к которому нужно подключиться. Распакуйте архив с программой для Linux в любой доступный каталог. Откройте файл c.c любым редактором, измените эти коды на коды своего USB устройства в тексте программы. Из командной строки зайдите в каталог с makefile и выполните команду make all. Запуск компилированной программы осуществлять с правами суперпользователя. |