在Windows上有一个名为pcitree的程序,它允许您在不编写设备驱动程序的情况下设置和读取内存.是否有一个替代pcitree的Linux,可以让我读取我的pcie卡0块的内存?
一个简单的用例是我使用驱动程序代码在我的pci-e卡的第0块的第一个内存地址上写一个32位整数.然后我使用pcitree替代方法读取块0的第一个内存地址的值并查看我的整数.
谢谢
解决方法:
我在网上发现了一些代码,我在这里做了我想要的github.com/billfarrow/pcimem.
据我所知,这个链接提供了通过系统调用“mmap”将内核内存映射到用户内存的代码
这主要是从程序的自述文件和mmap的手册页中窃取的.
mmap需要
>一个起始地址
>一个大小
>内存保护标志
>链接到pci卡的bar0的文件描述符.
>和抵消
mmap返回一个用户空间指针,指向由起始地址和大小参数定义的内存.
此代码显示了mmaps用法的示例.
//The file handle can be found by typing lscpi -v
//and looking for your device.
fd = open("/sys/devices/pci0001\:00/0001\:00\:07.0/resource0", O_RDWR | O_SYNC);
//mmap returns a userspace address
//0, 4096 tells it to pull one page
ptr = mmap(0, 4096, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
printf("PCI BAR0 0x0000 = 0x%4x\n", *((unsigned short *) ptr);