USB-устройства, как правило, хорошо поддерживаются на уровне ядра. Это означает, что вам редко приходится писать драйвер для каждого USB-устройства в ядре. Это потому, что приложения могут легко использовать libusb (и несколько других пользовательских USB-библиотек) для связи с устройством.
Если вы посмотрите на код USB в ядре, вы увидите, что это одна из самых сложных реализаций всего аппаратного протокола, но она также является общей для разных USB-устройств. Я уже занимался портированием для USB-устройств и, поверьте мне, libusb достаточно хорош.
Проверьте это (например):
http://libusb.sourceforge.net/doc/examples.html