我正在编写一个设备驱动程序来访问 PCIe 卡上 FPGA 中的内存。
卡启动并被探测/发现:-
/proc/iomem
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
84000000-840fffff : 0000:03:00.0
因此,阅读 ldd/etc 我编写了对request_mem_region
at 的调用80000000
,并通过请求指向它的指针ioremap_nocache
1)我是否需要request_mem_region
以及ioremap_nocache
,我不能只使用后者吗?
/proc/iomem 在insmod
我的设备驱动程序之后:-
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
80000000-8003ffff : fp2
84000000-840fffff : 0000:03:00.0
2) 我觉得不太对劲...?
无论如何,读取不起作用(它没有像下面那样编码,它有检查等):-
#define BAR_ADDR 0x80000000
void *base = ioremap_nocache(BAR_ADDR, 0x40000);
void *address = base + KNOWN_REG_LOCATION;
int data = ioread32(address);
printk("fp2: address:0x%08x, data:0x%08x\n", address, data);
输出:-
address:0xfd500000, data:0xffffffff
我可以x80000000+KNOWN_REG_LOCATION
从 mmap 用户空间读取。
3)我也试过__raw_readl
/readl
没有运气。
4)我可以在当前映射的地址处读取x80000000
吗?