Как ядро ​​USB решает, какой драйвер HCI использовать для драйвера устройства USB? - PullRequest
0 голосов
/ 10 октября 2018

Я ищу код драйвера USB-устройства.Похоже, все, что он делает - это заполняет сообщение URB, а затем вызывает usb_submit_urb (), чтобы передать сообщение основным функциям USB после вызова probe () при совпадении идентификатора производителя / продукта PCI.

Однако я не могу понять, как ядро ​​USB связывает драйвер устройства с правильным драйвером HCI (xHCI, eHCI и т. Д.) ... я обнаружил, что большинство драйверов HCI регистрируют себя как драйвер платформы, которыйимеет уникальное имя, это идентификатор для ядра USB, чтобы соотнести драйвер устройства и драйвер хоста?

1 Ответ

0 голосов
/ 10 октября 2018

Если у вас есть usb 3.0 - тогда ядро ​​использует драйвер xhci и не нуждается в драйверах uhci, ohci или ehci.В такой конфигурации у вас есть только один драйвер hci и один хост hci.Ранее в эпоху USB 2.0 существовало 2 возможных конфигурации:

  • ehci с сопутствующим контроллером (ohci или uhci)
  • ehci с транслятором транзакций (TT)

В первой ситуации вам нужно установить оба драйвера - например, ehci и uhci.Во втором требовался только выделенный драйвер ehci.

Так что в настоящее время, когда у вас есть только xhci - он регистрируется как единственный драйвер хоста usb в системе linux.Второе - это функция драйвера хоста для запроса чего-либо от usb-устройств, поэтому usb host генерирует любые запросы к устройствам и отвечает за поддержку ответов от устройства.Драйвер хоста xhci регистрирует свое прерывание и область памяти для обслуживания запроса.

Я думаю, что вам нужно взглянуть на эту проблему с точки зрения хоста (xhci), а не с точки зрения устройства, потому что хост является ведущим в USB-связи, и хост инициирует любые запросы.Устройство отвечает только на эти запросы.

...