Библиотека libusb и ее аналог libusb-win32 обычно используются совместно с устройствами, основанными на V-USB. Конечно, жесткой зависимости тут нет - одно может существовать без другого и наоборот. Однако, если Вы не хотите ставить DDK под Windows и изучать азы написания драйверов USB, лучше все-таки воспользоваться этой библиотекой: сэкономите кучу времени. Кроме того, логику работы со стороны PC-хоста вы можете писать и отлаживать как обычное приложение, не ломая голову над тем, как распечатать из ядра отладочную информацию.
I. Windows
libusb-win32 существует в двух вариантах.
А. Фильтр
Для установки фильтра надо запустить libusb-win32-filter-bin-x.x.x.x.exe. Инсталляция выглядит довольно стрёмно: либа добавляется в цепочку обработчиков USB, и на некоторое время все USB-устройства в системе отваливаются. Именно поэтому никогда не пытайтесь установить фильтр с файловой системы, расположенной на USB-устройстве. В Vista надо перед установкой открыть свойства и указать режим совместимости с Windows XP. Перезагрузка не требуется.
Б. Драйвер
Когда аппаратное устройство отлажено, более разумным выглядит инсталляция в виде драйвера. Для установки потребуются привилегии администратора, но зато и никакого подвисания в процессе инсталляции не будет. Драйвер оседает в системе в виде inf-фала, особой процедуры удаления не предусмотрено.
Кстати, так будет нагляднее при просмотре диспетчера устройств: можно прописать соответствующие текстовые строки. В противоположность этому, при подключении нескольких устройств на V-USB в режиме фильтра, они будут выглядеть одинаково. Чтобы отличить их одно от другого, придется хитрить ;)
Собственно, про все это я уже вскользь упоминал, и теперь хотел бы остановиться на втором методе более подробно.
Итак, качайте и распаковывайте файл libusb-win32-device-bin-x.x.x.x.tar.gz. В каталоге bin есть inf-wizard.exe, он поможет нам создать персональный inf-файл для нашего устройства (получается, что libusb0.sys/dll едины для всех, а вот inf-файлов может быть сколь угодно много). Чтобы не вводить руками VID, PID и имя устройства, перед запуском мастера подключите его к USB:
При использовании кода V-USB на условиях бесплатной лицензии, VID и PID одинаковы у всех разработчиков, зато Description должен быть уникальный. За деньги, естественно, вам выделят персональные VID/PID, не вопрос ;)
После сохранения в отдельный каталог, мы получим:
- *.inf - файл описания установки драйвера
- *.cat и *_x64.cat - здесь должны быть цифровые подписи драйверов, но для этого надо быть сертифицированным Micro$oft-ом. А без этого придется увидеть предупреждение о том, что Windows "с камнем на сердце так и быть, заинсталлирует какой-то непонятный драйвер без подписи".
Надо добавить в этот же каталог файлы libusb0.dll, libusb0.sys, libusb0_x64.dll и libusb0_x64.sys. После этого на него можно ссылаться в ответ на вопрос мастера установки драйверов, где же стоит пошукать драйвер "для неизвестного устройтва" или даже провести установку заранее - на *.inf по правой кнопке вызвать контекстное меню и выбрать "Установить".
Если надо позаботиться о пользователе, который программы запускает исключительно через ярлыки, а слово "распаковать" приводит его в суеверный ужас ;) можно сделать и полноценный инсталлятор. Рекомендую пользоваться надежной и при этом абсолютно бесплатной программой Inno Setup. Авторы libusb позаботились о таком развитии сюжета и положили в архив файл examples\install_driver_template.iss - это кусочек скрипта инсталляции файлов драйвера на языке Inno Setup. Предположим, выделенный каталог называется drivers, а inf-файл - MyCoolDevice.inf:
[Files] Source: "driver\*.sys"; DestDir: "{app}\driver" Source: "driver\*.cat"; DestDir: "{app}\driver" Source: "driver\*.dll"; DestDir: "{app}\driver" Source: "driver\*.inf"; DestDir: "{app}\driver" Source: "driver\*.dll"; DestDir: "{win}\system32"; FLags: replacesameversion restartreplace uninsneveruninstall [Run] ; invoke libusb's DLL to install the .inf file Filename: "rundll32"; Parameters: "libusb0.dll,usb_install_driver_np_rundll {app}\driver\MyCoolDevice.inf"; StatusMsg: "Installing driver (this may take a few seconds) ..."
Добавив эти строки в соответствующие секции любого готового скрипта Inno Setup, мы обеспечиваем установку драйверов в систему.
II. Linux
В linux все выглядит схожим образом, но немного проще. Проверьте в вашем менеджере пакетов, установлен ли libusb, например для Debian/Ubuntu/etc:
dpkg -l | grep libusb
Если нет, можно поставить:
sudo apt-get libusb-0.1-4
Для разработки программ потребуется установить девелоперский пакет libusb-dev:
sudo apt-get libusb-dev
После этого можно компилять, указывая необходимость линковки с libusb:
gcc -lusb myproject.c
Для разработчиков пакетов надо позаботиться о зависимости, например в файл debian/control добавить правило Depends:
Depends: libusb-0.1-4
Это вынудит менеджер пакетов ставить libusb с новым пакетом автоматически. Разумеется, потребуется правильно настроенный apt/sources.list.
Комментариев нет:
Отправить комментарий