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