Tag: pci

内核空间中PCI内存的地址映射

我正在尝试从可加载的内核模块读取和写入PCI设备。 因此我按照这篇文章 : pci_enable_device(dev); pci_request_regions(dev, “expdev”); bar1 = pci_iomap(dev, 1, 0); // void iowrite32(u32 val, void __iomem *addr) iowrite32( 0xaaaaaaaa, bar1 + 0x060000); /* offset from device spec */ 但最终设备没有按预期完成他的工作。 然后我查看bar1后面的地址,发现了一个非常大的值ffffbaaaaa004500 。 在这一点上,我真的不明白那里发生了什么,什么是正确的。 我可以将bar1解释为内核地址空间内的地址,该地址直接指向基本地址,该地址是PCI芯片选择地址的0x60000偏移量吗? 如何将写入bar1 + offset的值复制到设备中? 该机制如何在iowrite32和pci_iomap后面工作? 感谢致敬 亚历克斯 PS:我成功测试了同一地址的回读。 注册PCI设备的说明: PCIBAR0 PCI基地址0; 用于存储器映射配置寄存器 PCIBAR1 PCI基地址1; 用于I / O映射配置寄存器 PCIBAR2 PCI基地址2; 用于本地地址空间0 PCIBAR3 PCI基地址3; […]