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 устройствах, с которыми предполагается работать, запоминаются.
Рисунок 4 |
Создайте шаблонный, консольный проект «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. Запуск компилированной программы осуществлять с правами суперпользователя.
Пакет драйверов windows libusb win32 что это
Библиотека LibUSB [1] очень важна для использования со многими бесплатными программами. Например, для программ, которые переводят iPhone в режим восстановления (recovery mode), или выводят его из режима восстановления одним кликом (см. программы Recboot и EasyiRecovery). Многие примеры программ (ПО хоста USB), которые работают с самодельными устройствами USB (изготовленными на микроконтроллерах Atmel AVR на основе библиотек V-USB или LUFA), также написаны с использованием LibUSB. Можно еще привести пример популярной системы отладки OpenOCD для микроконтроллеров ARM, она также требует использования библиотеки LibUSB вместе с многими JTAG-адаптерами.
Установка LibUSB на 32-разрядных системах Windows проста, но многие пользователи 64-битных версий Windows сталкиваются с проблемами при установке LibUSB. В этой статье будет рассмотрена установка LibUSB на 64-битных редакциях Windows 7 и Windows Vista (перевод статьи [2]). Принципиальных отличий в установке LibUSB под операционной системой Windows 8 нет.
Важное замечание: не выполняйте шаги из этого руководства, если пытаетесь выбить Ваше iDevice из цикла recovery mode, и Вы хотите использовать Recboot или EasyiRecovery. По некоторым причинам LibUSB запретит Вашу клавиатуру и мышь при следующей загрузке, и чтобы это исправить, понадобится деинсталлировать LibUSB через загрузку в безопасный режим safe mode (либо придется воспользоваться откатом состояния системы). Поскольку программа TinyUmbrella не требует установки LibUSB, именно её рекомендуется использовать для манипуляций с рутингом Ваших устройств.
[Установка драйвера фильтра LibUSB на 64-битных Windows 7 и Windows Vista по шагам]
Установка библиотеки LibUSB для получения доступа для программ ПО хоста (программ, которые написаны в расчете на использование LibUSB) к устройствам USB на Windows обычно заключается в установке так называемого драйвера фильтра. Драйвер фильтра можно установить с помощью удобного GUI-инсталлятора (так называемого Мастера Установки Фильтра, Filter Wizard), и это самый лучший способ установки. Он просто пытается подключить драйвер фильтра к обнаруженному в системе устройству USB, которое выберет пользователь. Однако для установки драйвера класса все еще нужно использовать утилиту командной строки install-filter.exe (но это не рекомендуется делать).
Важно: перед началом установки войдите в систему под пользователем, у кого есть права администратора.
1. Скачайте дистрибутив библиотеки LibUSB, см. [1]. Пожалуйста, при загрузке выбирайте самый последний релиз дистрибутива библиотеки. Версии до 0.1.12.2 имели серьезные ошибки в реализации драйверов фильтра при работе под Windows Vista, Windows 7, и некоторыми инсталляциями Windows XP, так что используйте последние версии (1.1.14.0 и более новые). Для 64-битных Windows Vista/7/2008/2008R2 версия должна быть 1.2.0.0 или более свежая.
Загруженный файл будет называться наподобие libusb-win32-devel-filter-x.x.x.x.zip или libusb-win32-bin-x.x.x.x.zip. Не обращайте внимания, что в имени архива присутствует win32, в нем есть средства для установки драйвера и на 64-битной системе. Распакуйте его в любое место на диске (например, во временную папку C:\TEMP).
2. Подключите устройство USB, для которого Вы собираетесь установить драйвер фильтра, к компьютеру. Операционная система Windows должна его обнаружить. Чтобы убедиться в этом, откройте Диспетчер Устройств. Если устройство обнаружено, но для него система не смогла найти драйвер, то см. другой раздел «Использование INFWizard — генерация драйвера для неизвестного устройства USB».
Закройте все программы, которые могли бы использовать Ваше устройство USB.
3. Если у Вас процессор AMD, то запустите bin\amd64\install-filter-win.exe, если Intel, то запустите bin\ia64\install-filter-win.exe (для 32-разрядной системы запустите bin\x86\install-filter-win.exe). Тип процессора можно узнать через Свойства системы (Панель управления -> Система).
Появится стартовое окно мастера установки фильтра:
Удостоверьтесь, что выбран вариант для установки драйвера фильтра (Install a device filter), и нажмите Next.
4. Появится список устройств, которые система Windows распознала, и для которых установлены уже драйвера, но к которым пока не привязан драйвер фильтра библиотеки LibUSB:
Выберите в списке нужное устройство (к которому Вы хотите привязать драйвер фильтра), и нажмите Install. Через несколько секунд появится сообщение, что драйвер фильтра успешно установлен для выбранного устройства.
Нажмите OK, и закройте программу Filter Wizard. Установка драйвера фильтра успешно завершена.
[Использование INFWizard — генерация драйвера для неизвестного устройства USB]
Утилита для генерации драйвера INFWizard может понадобиться для того случая, когда операционная система не может сама подобрать драйвер для устройства. В Диспетчере Устройств такое устройство USB отображается как проблемное, для которого не установлен драйвер.
В этом случае можно сгенерировать новый драйвер с помощью утилиты bin/inf-wizard.exe. Далее описан процесс создания такого дистрибутива драйвера по шагам. Этот драйвер полностью заменит и драйвер устройства, и драйвер фильтра.
1. Запустите утилиту bin/inf-wizard.exe, откроется стартовое окно, где нужно сразу просто нажать Next.
2. В следующем окне нужно выбрать устройство USB, для которого будет генерироваться драйвер, и нажать Next.
3. Откроется окно, где можно отредактировать значения для VID (Vendor ID, идентификатор вендора в HEX-виде), PID (Product ID, идентификатор продукта в HEX-виде), индекс производителя MI (в HEX-виде), имя производителя, имя устройства.
Все параметры можно оставить как есть, ничего не изменяя, и просто нажать Next.
4. Откроется диалог для сохранения inf-файла, выберите имя файла (можно оставить его по умолчанию), выберите любую пустую папку для сохранения и нажмите Сохранить. В результате в выбранной папке появится inf-файл, инсталляторы installer_x64.exe, installer_x86.exe, и будут автоматически созданы подпапки amd64, ia64, x86, в которых содержатся системные файлы библиотеки LibUSB. Откроется окно диалога, в котором будут 2 кнопки: Install Now. (установить драйвер прямо сейчас) и Done (завершить).
Можно нажать Install Now. и установить вновь сгенерированный драйвер, а можно установку отложить, нажав Done.
5. Предположим, что Вы ранее нажали Done. Теперь собственно нужно установить только что сгенерированный драйвер. Для этого запустите Мастер Установки нового оборудования. Это можно сделать, если набрать в командной строке hdwwiz и нажать Enter. Или можно в Диспетчере Устройств выбрать в меню Действие -> Установить старое устройство. Откроется начальное окно мастера установки оборудования, нажмите кнопку Далее.
6. В следующем окне выберите «Установка оборудования, выбранного из списка вручную» и нажмите Далее.
7. В следующем окне выберите «Показать все устройства» и нажмите Далее.
8. Появится окно выбора драйвера для устройства. Нажмите кнопку «Установить с диска. «
Откроется окно, в котором нужно выбрать место расположения драйвера. Выберите папку, в которую Вы сохранили драйвер на шаге 4, выберите inf-файл, и нажмите Открыть:
Затем нажмите OK:
9. Отобразится окно с описанием драйвера, и предупреждение, что драйвер без цифровой подписи. Просто нажмите Далее.
10. Появится окно, которое сообщает о готовности к установке драйвера. Просто нажмите Далее.
11. Появится окно «Безопасность Windows», где еще раз сообщается о том, что у драйвера нет сертификата. Это окно позволяет отказаться от установки драйвера, или установить драйвер. Выберите второй вариант, «Все равно установить этот драйвер».
12. После этого несколько секунд будет отображаться прогресс копирования файлов драйвера, и затем появится сообщения о завершении установки драйвера.
Установка драйвера завершена.
[Удаление драйвера фильтра LibUSB]
Удаление драйвера фильтра LibUSB может понадобиться, если нужно восстановить доступ к устройству USB для обычных программ, которые не используют библиотеку LibUSB. Например, мне понадобилось удалить драйвер LibUSB для адаптера J-Link после экспериментов с OpenOCD, когда мне нужно было продолжить отладку через драйвера SEGGER в среде IAR.
1. Запустите мастер установки драйвера фильтра Filter Wizard — в зависимости от типа процессора это либо bin\amd64\install-filter-win.exe, либо bin\ia64\install-filter-win.exe, либо для 32-разрядной системы bin\x86\install-filter-win.exe. В первом окне мастера выберите вариант удаления драйвера фильтра (Remove a device filter), нажмите Next.
2. Выберите в списке устройство, для которого нужно удалить драйвер фильтра, и нажмите Remove.
3. Через несколько секунд появится сообщение об успешном удалении драйвера фильтра:
Нажмите OK, и закройте программу Filter Wizard. Удаление драйвера фильтра для устройства USB завершено.
[Удаление драйвера устройства LibUSB]
Чтобы удалить драйвер фильтра, воспользуйтесь GUI-утилитой (install-filter-win.exe), см. предыдущий раздел «Удаление драйвера фильтра LibUSB». Сам драйвер и его файлы удалить не так просто, но можно сделать либо откат состояния системы (Панель управления -> Восстановление), либо попробовать утилиту usbdeview [3]. В операционных системах Windows Vista и Windows 7 можно использовать системную утилиту командной строки pnputil для удаления пакета драйвера.
[Обновление драйвера фильтра LibUSB]
Сначала удалите старую версию драйвера фильтра, см. раздел «Удаление драйвера фильтра LibUSB». Затем установите новую версию драйвера фильтра, как это описано в разделе «Установка драйвера фильтра LibUSB на 64-битных Windows 7 и Windows Vista по шагам».
[Обновление драйвера устройства LibUSB]