假设我们struct page从页面缓存文件的地址空间中获得了一个。
我们如何从中获取 4KB 数据的起始物理地址struct page?
我想里面应该有类似data指针的东西struct sk_buff,但我没有找到。
编辑
感谢 Mat 和 llya 的回答。
看了答案后,我认为第一个问题是确定 是否struct page位于ZONE_NORMAL或ZONE_HIGHMEM。
在文件 I/O 期间,当我们没有找到缓存页面时,我们将首先使用page_cache_alloc_cold(). page_cache_alloc_cold()最终会调用alloc_pages()它看起来会使用ZONE_HIGHMEM(在 x86 中,是从PAGE_OFFSET+896M 开始的内核内存区域)来完成它的工作。
所以
- 我认为 Mat 的答案适用于
ZONE_NORMAL - 假设我们用
kmap()struct page 关联的 4KB 数据的起始物理地址来查找,那么我们应该用它(unsigned long)(&page)-PAGE_OFFSET来查找存储结构本身的物理地址是否正确?
请纠正。