Предварительный ответ:
Давайте попробуем разобраться в предположениях, может что-то прояснится.
I want to write a USB driver to talk to VHCI instead of user-space program that talk to it by sysfs or ioctl)
Что именно вы подразумеваете под «драйвером USB»? Драйвер ядра, реализующий конкретное устройство, например USB-камеру? Это будет «драйвер USB-гаджета», и в ядре уже есть немало таких, так что посмотрите на их код. Если вы хотите протестировать драйверы гаджетов, вам понадобится dummy_hdc
, который создает виртуальный корневой концентратор, содержащий все устройства, представленные драйверами гаджетов ядра.
Проект VHCI специально создан для обеспечения пространства пользователя USB-драйверов для (виртуальных )устройств. Если вам не нужна «пользовательская -космическая программа, которая общается с ней через sysfs или ioctl», то VHCI — неправильный выбор.
According to my understanding VHCI is similar to OHCI/UHCI code which are connected to real hardware.
Да, он предоставляет корневой концентратор; пока это похоже.
And USB drivers talk to USB core which eventually talk to OHCI/UHCI then to the hardware
Вы потеряли меня здесь. О каких «драйверах USB» вы говорите? Вы имеете в виду драйверы ядра, которые позволяют компьютеру и пользователю взаимодействовать с (реальными )USB-устройствами? Например,. usb_storage
, что делает запоминающие устройства USB видимыми как /dev/sd*
и т. д.? Они полностью независимы от драйверов пространства пользователя -VHCI или драйверов ядра USB-устройства.
Чтобы иметь возможность использовать эти драйверы, вы должны предоставить их аналог в виде реального USB-устройства на реальной шине USB или смоделированного USB-устройства в качестве драйвера гаджета ядра через dummy_hdc
или пользователя -. ] космический драйвер через VHCI.
Итак, если ваша реальная проблема :«У меня есть это новое USB-устройство,которое в конечном итоге должно стать реальным оборудованием, и я хочу написать для него драйвер ядра Linux, но сначала я хочу протестировать его». Затем вам понадобятся два драйвера :разработки, другой — виртуальный аналог, который имитирует -еще не существующее устройство. Вы можете сделать это в пространстве ядра (драйвере гаджета )или в пространстве пользователя -(VHCI ).
Для Python вы можете использовать pipreqs , чтобы получить список модулей в «стандартном» формате файла requirements.txt
, а затем использовать pip
для установки модулей/пакетов pip install -r requirements.txt
(, это, конечно, установит только те модули, которые еще не установлены ).