我正在为 Linux 编写一个 PCIe 驱动程序,目前没有 DMA,并且需要知道一旦从用户空间启用它后如何读取和写入 PCIe 设备。
在驱动程序中,我在 probe() 中执行基础操作:
pci_enable_device();
pci_request_regions();
pci_iomap();
但是我如何从用户空间访问这 block 内存进行读写呢?我是否将文件操作添加到我的 PCIe 驱动程序?来自 pci_iomap 的内存是否显示了用户空间代码可以调用的某个地方:
open('mapped memory location');
mmap(...);
如果有那么位置是什么?
注意:PCIe 设备不会插入任何 Linux 子系统,例如音频、以太网等。
最佳答案
如果你只想将内存从内核空间导出到用户空间并获得中断,请考虑 UIO driver .
有了它,所有的访问都将通过/dev/uioX 文件完成。您可以对其执行 mmap() 以导出内存,并且可以读取(使用阻塞读取)以“捕获”中断。
UIO 非常适合 PCIe,already is a driver在内核中。
关于linux - PCIe Driver - 用户空间如何访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35276634/