我写了一个简单的 PCIe 驱动程序,我想测试它是否有效。例如,如果可以对设备使用的内存进行写入和读取。
我怎样才能做到这一点?
哪些东西也应该被证明?
我写了一个简单的 PCIe 驱动程序,我想测试它是否有效。例如,如果可以对设备使用的内存进行写入和读取。
我怎样才能做到这一点?
哪些东西也应该被证明?
例如,您需要为您的设备找到 sysfs 条目
/sys/devices/pci0000:00/0000:00:07.0/0000:28:00.0
(通过其他子目录中的符号链接可以更容易地到达那里/sys
,例如/sys/class/...
)
在这个目录中应该有(伪)文件命名resource...
,它们对应于您设备的各种地址范围(基地址寄存器)。我认为这些可以mmap()
编辑(但我从未这样做过)。
您可以使用 /sys 中的条目执行许多其他操作。有关更多详细信息,请参阅内核文档。
要测试内存,您可以按照以下方法:
1)做 lspci -v
Output of this command will be something like this
0002:03:00.1 Ethernet controller: QUALCOMM Corporation Device ABCD (rev 11)
Subsystem: QUALCOMM Corporation Device 8470
Flags: fast devsel, IRQ 110
Memory at 11d00f1008000 (64-bit, prefetchable) [disabled] [size=32K]
Memory at 11d00f0800000 (64-bit, prefetchable) [disabled] [size=8M]
Capabilities: [48] Power Management version 3
Capabilities: [50] Vital Product Data
Capabilities: [58] MSI: Enable- Count=1/8 Maskable- 64bit+
Capabilities: [a0] MSI-X: Enable- Count=1 Masked-
Capabilities: [ac] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [13c] Device Serial Number 00-00-00-00-00-00-00-00
Capabilities: [150] Power Budgeting <?>
Capabilities: [180] Vendor Specific Information: ID=0000 Rev=0 Len=028 <?>
Capabilities: [250] #12
2)我们可以在上面看到输出内存被禁用。要启用它,我们可以执行以下操作:
setpci -s 0002:03:00.1 COMMAND=0x02
此命令将启用地址处的内存:11d00f1008000
现在,尝试使用您的处理器读取命令读取该内存,它应该可以访问。