Я пытаюсь получить доступ к области памяти "/dev/xdma_h2c_0". Я достиг чтения / записи, используя системные функции чтения / записи. Теперь я пытаюсь использовать mmap, чтобы сделать то же самое. Но я получаю Нет такой ошибки устройства. Есть ли быстрый способ узнать, является ли местоположение / дескриптор файла mmap (-able) или нет? (Эта ячейка памяти доступна на плате Xilinx Virtex FPGA с использованием драйверов Xilinx)

1 ответ1

0

Согласно вашим комментариям, /dev/xdma_h2c_0 является символьным устройством, и поэтому на нем невозможно использовать mmap() - это просто не имеет смысла, в первую очередь потому, что это не адресуемое устройство (вы не можете использовать lseek() / fseek() либо).

Если адресное пространство FPGA представлено через PCI / PCIe, то вам может повезти с использованием lspci для определения местоположения областей памяти, открытия /dev/mem и использования с этим mmap() ... хотя это связано со всеми соответствующими проблемами безопасности и предупреждения ... то есть: не делайте этого в реальном продукте или вне лаборатории / дома.

В идеале вы бы написали правильный диск, чтобы показать все функции, которые вы предоставляете в FPGA.


В соответствии с вашими комментариями, вы можете вызвать lseek() на устройстве, которое не является типичным для символьных устройств.

Структура file_operations описывает, какие « функции » доступны с устройства или узла.

Это потому, что адресное пространство представлено через драйверы Xilinx PCIe?

Глядя в основное ядро, я не могу сразу увидеть драйвер, но если интерфейс к FPGA действительно PCIe, и не используется какой-то странный механизм управления окнами, то я бы предположил, что есть некоторая область флага, доступная для памяти, и, следовательно, метод поиска в нем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .