В проекте, в котором я участвую, у нас есть следующие настройки оборудования:
Linux PC ------> "Router" +----> "Device A"
|
+----> "Device B"
Linux PC - это стандартный ПК X86.
"Маршрутизатор " - это разработанное нами оборудование, которое подключено к другим аппаратным средствам в нашей системе.В этом примере «Устройство A».«Маршрутизатор» подключен к ПК с Linux через USB.
«Устройство A» и «Устройство B» представляют собой аппаратные компоненты системы.Они подключены к оборудованию «Маршрутизатор» через некоторый канал связи (в данном случае это неважно).
Моя задача - написать драйвер устройства Linux для «Устройства А» (а также других устройств).
Я уже создал USB-драйвер общего назначения, который взаимодействует с «Маршрутизатором», и это прекрасно работает.Мой план состоял в том, чтобы иметь стек драйверов, который бы выглядел так:
+----------+----------+
| dev_A.ko | dev_B.ko |
+----------+----------+
| router.ko |
+---------------------+
| Linux USB driver |
+---------------------+
То есть: драйверы устройств взаимодействуют со своим оборудованием с помощью модуля ядра router.ko, который, в свою очередь, построен на стандартномЯдро драйвера USB для Linux.
Моя проблема в том, что к ПК с Linux существует только одно физическое устройство: аппаратное обеспечение «Маршрутизатор», подключенное через USB, что означает, что драйверы устройств становятся своего рода виртуальными устройствами.
Я мог бы скомпилировать драйверы устройств и драйвер устройств маршрутизатора в один большой модуль ядра, но это не кажется лучшим решением.
Кроме того, поскольку «Устройство A» ранее было подключено напрямую кдля ПК с Linux уже существует драйвер для него с четко определенным пользовательским интерфейсом, который необходимо сохранить, так как в работе уже есть приложения, которым нужно обращаться к нему.
Мой вопрос более или менее сводится к этому:
Учитывая вышеизложенный аппаратный сценарий, как бы вы структурировали модули ядра Linux?