#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 pci4. Вероятно, я буду использовать
int pci_mmap_page_range
функцию, объявленную в pci.h для создания новой страницы в виртуальной памяти ядра, которую я буду использовать в реализованной функции mmap в драйвере5. хорошо, не отвечайте мне, просто кто-нибудь, пожалуйста, скажите: так ли работают драйверы бэкдора, просто нашел что-то, что я могу / не могу понять? если это так, значит ли это, что обход стека ядра является неправильным [технически не подразумевается под «неправильным»]