【发布时间】:2011-03-03 19:18:37
【问题描述】:
我正在编写一个设备驱动程序来访问 PCIe 卡上 FPGA 中的内存。
卡启动并被探测/找到:-
/proc/iomem
80000000-840fffff : PCI Bus #03
80000000-83ffffff : 0000:03:00.0
84000000-840fffff : 0000:03:00.0
所以阅读 ldd/etc 我在80000000 编写了对request_mem_region 的调用,并通过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
我可以从 mmap 用户空间读取x80000000+KNOWN_REG_LOCATION。
3) 我试过__raw_readl/readl 也没有运气。
4) 我可以在当前映射的地址x80000000处读取吗?
【问题讨论】:
-
您的 .tar 文件需要密码。审查代码会很有帮助。
-
我认为你的评论应该指向@willtake
标签: linux-kernel pci