linux 访问pci 内核,linux-kernel – 实现PCIe Linux设备驱动程序(想从内核驱动程序访问我的卡寄存器)...

我正在编写一个设备驱动程序来访问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吗?

你可能感兴趣的:(linux,访问pci,内核)