【发布时间】:2023-03-18 09:30:01
【问题描述】:
我正在为 Linux 编写 PCIe 驱动程序,目前没有 DMA,并且需要知道如何从用户空间启用 PCIe 设备后对其进行读写。
在驱动程序中,我在 probe() 中进行基础操作:
pci_enable_device();
pci_request_regions();
pci_iomap();
但是我如何从用户空间访问这个内存来读写呢?我是否将文件操作添加到我的 PCIe 驱动程序? pci_iomap 的内存是否显示了用户空间代码可以调用的某个地方:
open('mapped memory location');
mmap(...);
如果是,那么位置在哪里?
注意: PCIe 设备不会插入任何 Linux 子系统,例如音频、以太网等。
【问题讨论】:
-
不确定这是否是推荐的做事方式,但其他内核驱动程序会公开像
/dev/vboxnetctl这样的虚拟设备,我假设您可以向其发出命令。我不确定 Linux 内核是否允许任何用户空间程序随意读取/写入 PCIe 设备,这听起来可能很危险。 -
我也在看那个。为了让我的设备出现在那里,我需要做些什么吗?例如,我在驱动程序中进行了哪些 API 调用?
-
或许可以看看VirtualBox驱动源代码来获得灵感。
-
顺便说一句,最好使用
pcim_*()API。 -
pcim_*()到底是什么,我为什么要使用它?有时收集 Linux 文档可能很痛苦,所以请您提供一两句话吗?
标签: linux linux-kernel linux-device-driver pci-e userspace