Короче говоря, я разрабатываю встроенную систему, которая требует, помимо прочего, моста от хост-порта USB к порту устройства (это только первый шаг, позже передаваемая информация будет отфильтрована и изменена).
Учитывая, что это в основном USB-сниффер / сниффер, я подумал, что кто-то должен был написать модуль, способный на это, но мой поиск оказался бесполезным.
Итак, на вопрос: как проще всего перенаправить USB-хост на USB-устройство в Linux? Данные должны быть идентичны, все дескрипторы и конечные точки должны совпадать. Он должен быть дружественным к Linux, я могу программировать на C / C ++ и иметь некоторый опыт программирования модулей ядра, драйверов и т. Д.
Я нашел предыдущую работу в http://www.elinux.org/BeagleBoard/GSoC/2010_Projects/USBSniffer
На мой взгляд, самый простой способ перенаправить USB-хост на USB-устройство в Linux — это использовать как периферийный USB-стек Linux, так и USB-стек гаджетов Linux. Эти стеки заботятся о низком уровне, поэтому ваш код должен касаться только взаимодействия высокого уровня между этими двумя стеками. Дополнительным бонусом является то, что сниффер (через usbmon) будет приходить почти бесплатно.
Поскольку этот способ будет иметь дело с ядром Linux, он должен быть дружественным к Linux. Интерфейс для обоих стеков (по крайней мере) доступен в C. Итак, ваши условия соблюдены.
Других решений пока нет …