为什么我的PCI-e I / O寄存器读取似乎已被缓存?

时间:2019-07-15 19:42:41

标签: c linux io linux-device-driver pci-e

我有一个PCI-e硬件设备,该设备具有许多要读取和写入的寄存器。但是,当我读取寄存器时,我将从先前的读取中获得一个值(第一次读取返回0xFFFFFFFF)。

我正在使用pci_iomap()来获取I / O区域的基地址。我尝试使用readl()和ioread32()而不是直接指针取消引用,这是在我收到的原始代码中进行的。都给出相同的结果。

例如,如果寄存器foo包含0xDEADBEEF,则第一次读取将返回0xFFFFFFFF,而随后的读取将返回0xDEADBEEF。如果然后我读取包含0xFEEDFACE的寄存器bar,则第一次读取将返回0xDEADBEEF,所有后续读取将返回0xFEEDFACE。

1 个答案:

答案 0 :(得分:0)

如果从用户代码中看到错误的值,调用ioctl()并取回错误的值,请查看驱动程序对copy_from_user()和copy_to_user()的使用。作为检查,您可以使用printk()或更好的dev_dbg()打印驱动程序看到的寄存器地址和值。

相关问题