Для того, чтобы написать драйвер PCI ethernet. Как реализовать MMAP в драйвере PCI Ethernet

#linux #driver #ethernet #pci #network-driver

#linux #драйвер #ethernet #pci #сетевой драйвер

Вопрос:

В драйвере устройства Ethernet PCI, если драйвер позволяет приложениям отображать буфер пользовательского пространства в виртуальную память драйвера и позволяет пользователю вызывать MMAP в файле драйвера устройства после его открытия. Тогда как реализовать MMAP в драйвере сетевого устройства PCI ETHERNET?

Я уже заглянул в структуру dev_pci. Есть некоторые элементы, которые названы так, как они имеют какое-то отношение к MMAP, но я не мог точно определить, как заставить драйвер устройства реализовать MMAP.

В книге «Драйвер устройства Linux» автор специально не связывал отображение памяти в драйвере устройства с драйвером устройства PCI или драйвером сетевого устройства.

Любая помощь в том, как включить мой драйвер устройства PCI / Network / Ethernet для обработки вызовов MMAP из пользовательского пространства и отображения буфера для пользователя в виртуальную память драйвера, которую я ищу, особенно как зарегистрировать XX___mmap(...) функцию реализации в драйвере устройства с помощью PCI и драйвера сетевого устройства. У меня есть драйверы устройств dev_pci и net_dev в драйвере устройства.

Комментарии:

1. Итак, в основном похоже, что мне нужно связать файл с моей некоторой структурой, которая содержит pci dev. Моя идея заключалась в том, что я получаю пакеты в обработчике прерываний и связываю их с некоторой виртуальной отображаемой областью или страницей. Итак, это мой вопрос, если у меня есть struct vm_area_struct и в нем у меня есть vm_start amp; vm_end amp; offset, тогда как записывать пакеты на виртуальный адрес пользовательского буфера, отображенного в ядре, который я буду делать в обработчике опроса netdev_ops для приема пакетов

2. Итак, вопрос действительно в том, имеет ли это смысл: if I use char driver with file operations for mmap и pci driver for pci device для устройства Ethernet, и «ОБА объединены в один файл драйвера c» с помощью single __init . Я думаю, это единственный способ сделать это. если нет другого варианта. Пожалуйста, объясните

3. в основном результатом этого будет функция mmap, включенная в e1000e драйвере устройства Intel Ethernet pci

4. Вероятно, я буду использовать int pci_mmap_page_range функцию, объявленную в pci.h для создания новой страницы в виртуальной памяти ядра, которую я буду использовать в реализованной функции mmap в драйвере

5. хорошо, не отвечайте мне, просто кто-нибудь, пожалуйста, скажите: так ли работают драйверы бэкдора, просто нашел что-то, что я могу / не могу понять? если это так, значит ли это, что обход стека ядра является неправильным [технически не подразумевается под «неправильным»]