Skip to main content
 首页 » 编程设计

memory-management之如何以编程方式获取 linux 内核页面大小

2024年09月03日14jyk

我正在为 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 等)?
  • 其他?
  • 请您参考如下方法:

    尝试使用 getconf 实用程序,它可以让您轻松检索页面大小。

    getconf PAGESIZE