我正在使用基于PowerPC架构的Freescale MPC8308处理器上的PCI-e端口,并尝试使用时遇到了一些问题。端点PCI-e设备具有等于256MB的内存空间。我可以轻松地通过使用“pciutils”软件包读取和写入端点设备的配置空间。
在将正确的值写入配置寄存器并获得访问内存空间的权限后,我尝试使用C语言中的“mmap()”函数访问内存空间,并使用位于以下位置的文件描述符:
谢谢
在将正确的值写入配置寄存器并获得访问内存空间的权限后,我尝试使用C语言中的“mmap()”函数访问内存空间,并使用位于以下位置的文件描述符:
"/sys/devices/pci0000:00/0000:00:00.0/resource0"
这个设备的内存空间大小恰好是256 MB(与终端设备的内存空间相同),因此似乎我正在使用正确的文件描述符路径。您可以在此处找到我的代码,其中使用了"mmap()",如https://github.com/billfarrow/pcimem所述:
https://github.com/billfarrow/pcimem/blob/master/pcimem.c
但是,不幸的是,当我尝试使用“mmap()”函数返回的地址来使用内存空间时,我无法正确读取端点设备的只读寄存器。而且,当我读取大于“0x7FFFFFC”的地址时,MPC8308会重新启动。 考虑到上述情况,我是否错过了初始化PCI-e接口的任何步骤?我应该更改Linux内核映像或U-Boot代码中的任何内容吗?对于使用PowerPC PCI-e和mmap()有什么不同吗?您是否有任何示例代码可以帮助我读取PCI-e内存空间?谢谢