Я недавно читал о Linux Модель драйвера и устройства. Я хотел понять, как работает следующее в linux в подсистеме драйверов. Допустим, мое дерево устройств выглядит следующим образом:
В качестве примера давайте предположим, что Bus1 - это шина PCI, Bus2 - это ISA, а Bus3 - это USB. Автобусы соединяются друг с другом с помощью мостов.
Linux будет идентифицировать это дерево устройств посредством процесса перечисления и механизма перечисления и проверки, подходящий драйвер USB для оконечного устройства.
Теперь давайте предположим операцию Tx к этому терминальному устройству. Драйвер usb оконечного устройства в конечном итоге будет выполнять urb_submit (dev, write_buffer).
Мой вопрос заключается в том, чтобы URB достиг терминального устройства, теоретически его нужно будет заключить в конверты Bus2 и Bus1. Таким образом, теоретически говоря, исходящий пакет должен выглядеть примерно так:
Так что в некоторых случаях после того, как urb_submit происходит в драйвере, какой-то код ядра набирает обороты древовидную структуру устройства и вызовите драйверы шины по порядку (драйвер шины 2, а затем драйвер шины 1) для создания этой структуры огибающей.
Может кто-нибудь указать мне код в ядре linux, где это происходит? Я пытался следовать urb_submit, но не смог понять это.
Спасибо большое!