Взаимодействие кода сокета с драйвером Linux для PCI - PullRequest
0 голосов
/ 19 июня 2010

У меня есть два устройства, которые связаны с PCI.У меня также есть код для обоих устройств, который использует общий код сокета.(Изначально устройства были подключены через MII / Ethernet.)

Теперь мне нужно написать драйвер устройства PCI для передачи пакетов назад и вперед между двумя устройствами.

Как получить доступ к файловым дескрипторам, открытым кодом сокета?Это то же самое, что доступ к файлу символьного устройства?

Драйвер PCI должен каким-то образом захватывать пакеты из read () и write () в коде.

Спасибо!

1 Ответ

0 голосов
/ 19 июня 2010

Ответы на ваши вопросы: (1) нет, и (2) нет.

Файловые дескрипторы представляют собой концепцию пользовательского пространства, а драйверы ядра не взаимодействуют с концепциями пользовательского пространства. (Да, они реализованы ядром, но другие драйверы устройств не могут играть с ними напрямую и не должны играть с ними даже косвенно.)

То, что вы делаете, это реализует методы, которые будут получать данные, которые буферизируются в доступной для ядра области памяти, и отправлять их на ваше оборудование, а затем получать данные с вашего оборудования и записывать их (при запросе) в буфер в ядре. -доступная память.

Вы сделаете это путем реализации API-интерфейсов драйвера символьного устройства, а также API-интерфейса драйвера устройства PCI, а затем зарегистрируете свой драйвер как устройство PCI, а затем символьное устройство. Хотя некоторые из этих методов могут ссылаться на файловые структуры, они не будут структурами пользовательского пространства, которые вы знаете и любите.

Для устройств, которые реализуют протоколы Ethernet, жизнь проще, потому что вместо этого вы реализуете интерфейс сетевых устройств. Таким образом, все, что вам нужно написать, это части, необходимые для получения данных от вашего оборудования.

Вам понадобятся спецификации оборудования устройства, способы управления оборудованием с помощью регистров и регионов PCI.

Хорошая новость заключается в том, что вам не нужно делать это в одиночку - существует большое сообщество разработчиков ядра и несколько хороших (и текущих) книг по разработке для ядра Linux (см. Ниже).

Ссылки

...