Я пытаюсь получить доступ к области памяти "/dev/xdma_h2c_0". Я достиг чтения / записи, используя системные функции чтения / записи. Теперь я пытаюсь использовать mmap, чтобы сделать то же самое. Но я получаю Нет такой ошибки устройства. Есть ли быстрый способ узнать, является ли местоположение / дескриптор файла mmap (-able) или нет? (Эта ячейка памяти доступна на плате Xilinx Virtex FPGA с использованием драйверов Xilinx)
1 ответ
Согласно вашим комментариям, /dev/xdma_h2c_0
является символьным устройством, и поэтому на нем невозможно использовать mmap()
- это просто не имеет смысла, в первую очередь потому, что это не адресуемое устройство (вы не можете использовать lseek()
/ fseek()
либо).
Если адресное пространство FPGA представлено через PCI / PCIe, то вам может повезти с использованием lspci
для определения местоположения областей памяти, открытия /dev/mem
и использования с этим mmap()
... хотя это связано со всеми соответствующими проблемами безопасности и предупреждения ... то есть: не делайте этого в реальном продукте или вне лаборатории / дома.
В идеале вы бы написали правильный диск, чтобы показать все функции, которые вы предоставляете в FPGA.
В соответствии с вашими комментариями, вы можете вызвать lseek()
на устройстве, которое не является типичным для символьных устройств.
Структура file_operations
описывает, какие « функции » доступны с устройства или узла.
Это потому, что адресное пространство представлено через драйверы Xilinx PCIe?
Глядя в основное ядро, я не могу сразу увидеть драйвер, но если интерфейс к FPGA действительно PCIe, и не используется какой-то странный механизм управления окнами, то я бы предположил, что есть некоторая область флага, доступная для памяти, и, следовательно, метод поиска в нем.