c - 如何将物理地址转换为内核模块(x86-64)内的内核页面结构?

标签 c linux linux-kernel memory-address

如何将物理地址转换为内核模块中的内核页面结构? (仅适用于 x86-64 架构)。

以下是我目前所拥有的:

void *kernel_logical_address = phys_to_virt(physical_address);

现在,如何为这个 kernel_logical_address 获取 struct page

为什么我需要它?

在我正在处理的内核模块中,它维护着一个空闲页面列表

 struct page *pages

我想将这个特殊页面(指向 physical_address 的那个)添加到这个特定列表中。我该怎么做呢?

最佳答案

使用 pfn_to_page(pfn_num) 宏。 Pfn num == phys_addr >> 12

关于c - 如何将物理地址转换为内核模块(x86-64)内的内核页面结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46745788/

相关文章:

linux - Linux 中内核空间和用户空间之间的原子行为?

linux - 如何在 SMP linux 中获取给定 cpu 的当前任务?

c - 如何将复数(复数)与 C 中的整数相乘?

时间:2019-03-17 标签:c++: how to write text to a file infinitely (inside infinite loop)?

c++ - 从 Linux 到 Windows 交叉编译时应该如何处理字符编码?

linux - 如何在 Iterm 中插入制表符?

c - 用 C 语言将图案打印到屏幕上

C 线程和 curl 内存泄漏

c - 在文件中逐行读取特定区域的文件

在内核中创建一个简单的只写过程条目