繁体   English   中英

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

[英]Linux PCIe device driver read/write functions not working for certain addresses

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

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

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

如果你放了怎么办?

  #define _FILE_OFFSET_BITS 64

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM