我有一个PCI-e硬件设备,该设备具有许多要读取和写入的寄存器。但是,当我读取寄存器时,我将从先前的读取中获得一个值(第一次读取返回0xFFFFFFFF)。
我正在使用pci_iomap()来获取I / O区域的基地址。我尝试使用readl()和ioread32()而不是直接指针取消引用,这是在我收到的原始代码中进行的。都给出相同的结果。
例如,如果寄存器foo
包含0xDEADBEEF,则第一次读取将返回0xFFFFFFFF,而随后的读取将返回0xDEADBEEF。如果然后我读取包含0xFEEDFACE的寄存器bar
,则第一次读取将返回0xDEADBEEF,所有后续读取将返回0xFEEDFACE。
答案 0 :(得分:0)
如果从用户代码中看到错误的值,调用ioctl()并取回错误的值,请查看驱动程序对copy_from_user()和copy_to_user()的使用。作为检查,您可以使用printk()或更好的dev_dbg()打印驱动程序看到的寄存器地址和值。