如何解决PCI mmio从lspci分配不同的地址
我正在研究以太网 NIC 的 PCI 驱动程序。
这是我的代码
int rc = pcim_enable_device(pdev);
...
abc = ffs(pci_select_bars(pdev,IORESOURCE_MEM))-1;
if (pci_resource_len(pdev,abc) < 256) {
dev_err(&pdev->dev,"Invalid PCI region size(s),aborting\n");
return -ENODEV;
}
rc = pcim_iomap_regions(pdev,BIT(abc),"modinfo");
void *mmio_addr = pcim_iomap_table(pdev)[abc];
printk("%x\n",mmio_addr);
在上面的行中,mmio_addr
不是 lspci -vvv
命令中显示的我相信 pcim_iomap_regions()
给出了 MMIO 的地址,可以在 dmesg 的 lspci
命令输出中看到我是得到 0x8006d000
但我的 MMIO 区域 2 和 3 是 c0404000
& c0400000
。这是为什么?我的 PCI 以太网驱动程序实际上是我的模块,如以太网 PCI 的内核驱动程序所述。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。