Linux PCIe设备驱动程序读/写功能不适用于某些地址

时间:2012-09-07 19:03:12

标签: linux linux-kernel driver

我编写了PCIe设备驱动程序,读/写功能无法正常工作。该器件有3个存储区,从0x10800000,0x0c000000和0x80000000开始。仅用于测试目的,我在驱动程序中的读写函数打印出传递的地址并返回。如果我从用户空间应用程序调用pread()或pwrite(),我会看到前2个内存区域传递的地址,但是如果我调用第三个内存区域,我什么也看不见就好像它没有甚至进入驱动程序的读写功能。

我的驱动程序在运行Linux版本2.6.32的64位计算机上运行完全正常。它不能使用的另一台机器是运行linux 2.6.25版本的32位机器。我的想法是,也许32位不喜欢0x80000000地址,但如果是这种情况,我不知道如何验证它或如何解决它。

1 个答案:

答案 0 :(得分:1)

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

如果你把

怎么办?
  #define _FILE_OFFSET_BITS 64

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