Имеется инструмент USB/IP, который позволяет обмениваться доступом к устройствам USB через сеть TCP/IP. USB-устройство, подключенное к ПК Linux, на котором работает TCP-сервер и ПК с ОС Windows с драйвером VHCI, который подключается к Linux. Этот подход позволяет эмулировать любое устройство USB без оборудования вообще. Все, что вам нужно, это написать TCP-сервер, который будет обрабатывать запросы USB. (например, here)Эмулированное устройство USB/IP, не указанное libusb
Но проблема с этим, что эмулируемое устройство не совсем правильное. Когда вы попытаетесь перечислить подключенные USB-устройства с помощью libusb, вы получите сообщение об ошибке 'unlisted ancestor for ..', так как эмулированное устройство не имеет родителя в дереве устройств. С другой стороны некоторые инструменты, такие как Zadig показывают эмулируемое устройство.
Описанная проблема here и никакое реальное решение.
Вопрос в том, что это ошибка в драйвере USB/IP-драйверов? Может ли кто-нибудь, кто сталкивался с разработкой драйверов Windows, помогает? Что такое сделка с родительским устройством? Почему это так важно?
Любой намек будет очень оценен! Большое спасибо за любую помощь
UDPATE: технически проблема заключается в том, что родительский элемент эмулируемого устройства (перечислитель USB/IP), не признанный libusb как HUB. Это приводит к тому, что эмулированные устройства игнорируются из-за родителя NULL. Так вопрос в том, как пропатчить драйвер USB/IP, чтобы быть видимым libusb в обычном режиме USB HUB
Не могли бы вы поделиться источником с этими изменениями? Куча средств отладки USB, похоже, не работает или не видит, как в вашем случае, с USB/IP, и я пытаюсь имитировать устройство с ним. – crazysim
Спасибо! Это очень полезно. – crazysim
Это 'Bus_PDO_QueryDeviceCaps'? – crazysim