Linux PCIe设备驱动程序读/写function对某些地址不起作用

我写了一个PCIe设备驱动程序,读/写function无法正常工作。 该器件有3个存储区,从0x10800000,0x0c000000和0x80000000开始。 仅用于testing目的,驱动程序中的读取和写入function将打印出传递的地址并返回。 如果我从用户空间应用程序调用pread()或者pwrite(),我会看到前两个内存区域的地址,但是如果我调用第三个内存区域,我什么也看不到,甚至可以input驱动程序的读取或写入function。

我的驱动程序在运行Linux版本2.6.32的64位机器上工作得很好。 这个不能工作的另一台机器是运行linux 2.6.25版的32位机器。 我的想法是,也许32位不喜欢0x80000000地址,但我不知道如何validation或如何解决这个问题。

这是一个非常模糊的问题(你在做什么文件pread / pwrite?),但是因为你说一切工作在64位,你的驱动程序甚至不被32位调用,我猜是问题是0x80000000溢出32位的事实,并成为一个巨大的负数。

如果你放

  #define _FILE_OFFSET_BITS 64 

作为你的用户空间源代码的第一行? (或在gcc命令行上传递“-D_FILE_OFFSET_BITS = 64”)?