【发布时间】:2011-02-03 15:28:05
【问题描述】:
我正在为 IA64 开发一个 Linux 模块。我当前的问题是驱动程序使用 PAGE_SIZE 和 PAGE_SHIFT 宏进行 dma 页面分配。我遇到的问题是编译驱动程序的机器不是运行驱动程序所需的机器。因此,如果编译机器上的 PAGE_SIZE 为 2^14K,而目标机器为 2^16K,则驱动程序失败。
我不想把这个问题变成关于在不是运行模块的机器上编译模块的“最佳实践”问题。我理解这方面的问题。我发现人们大多使用 getpagesize() 或 sysconf(_SC_PAGE_SIZE)。这两个选项不在 ia64 内核头文件中,所以我不能使用它们。还有其他方法可以获得运行时 PAGE_SIZE 吗?
我正在查看的选项:
- 正在读取 /proc 中的某些文件?
- 系统调用?
- 让我通过推理计算 PAGE_SIZE 的其他函数(例如 ORDER、getpageshift 等)?
- 其他?
【问题讨论】:
-
您是说
PAGE_SIZE可针对 IA64 架构进行配置,而不是固定的?我认为PAGE_SIZE对于给定的架构是固定的(例如,对于 x86 总是4096)。 -
IA64 确实支持多种页面大小:informit.com/articles/article.aspx?p=29961&seqNum=3
标签: memory-management linux-device-driver dma