linux – 使用mmap访问PCI-e内存空间
我在飞思卡尔MPC8308处理器(基于PowerPC架构)上使用PCI-e端口,在尝试使用它时遇到了一些问题.端点PCI-e设备的内存空间等于256 MB.我可以使用“pciutils”包轻松读写端点设备的配置空间.
在配置寄存器中写入正确的值并获得访问存储空间的权限之后;我试图通过在C中使用“mmap()”函数来访问内存空间,并使用位于以下位置的文件描述符:
这正好是256 MB(等于端点设备的内存空间)所以我似乎正在使用正确的文件描述符路径.在这里你可以使用https://github.com/billfarrow/pcimem中提到的“mmap()”找到我的代码: https://github.com/billfarrow/pcimem/blob/master/pcimem.c 但不幸的是,当我尝试使用“mmap()”函数的返回地址来使用内存空间时;我无法正确读取端点设备的只读寄存器.此外,当我读取大于“0x7FFFFFC”的地址时,MPC8308重新启动. 谢谢 解决方法
mmap()是一种非常有用但随意的方式从用户空间访问PCIe设备.
我注意到你传递0作为mmap的第一个参数.在我插入x86计算机的FPGA卡的情况下,我打电话给lspci以获取pcie插槽中卡的物理地址.然后我使用该物理地址作为mmap的第一个参数.我知道你在设备的配置空间中写了BAR,但也许用lspci仔细检查. $sudo lspci -s 02:00 -v 02:00.0 Memory controller: Xilinx Corporation Device 8028 Subsystem: Xilinx Corporation Device 0007 Flags: bus master,fast devsel,latency 0,IRQ 11 Memory at f7e00000 (32-bit,non-prefetchable) [size=1M] Capabilities: [80] Power Management version 3 Capabilities: [90] MSI: Enable- Count=1/1 Maskable- 64bit+ Capabilities: [c0] Express Endpoint,MSI 00 Capabilities: [100] Advanced Error Reporting (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |