如何确定设备内存的页框号?来自 LDD3/ Ch. 15/“使用 remap_pfn_range”和“一个简单的实现”部分,pfn 已等同于 vm_pgoff 字段。我对此感到困惑。怎么会这样?
请注意,vm_pgoff 被描述为:
文件中区域的偏移量,以页为单位。映射文件或设备时,这是该区域中映射的第一页的文件位置。
因此,如果映射的第一页也对应于文件的第一页(我认为这很常见),vm_pgoff 将为 0。对吗?如果是这样,这似乎不是 remap_pfn_range( ) 的 pfn 参数的正确值。我在这里想念什么?什么是正确的值?为了便于参考,我从下面的LDD3中复制了相关代码(第426页)
static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma)
{
if (remap_pfn_range(vma, vma->vm_start, vm->vm_pgoff,
vma->vm_end - vma->vm_start,
vma->vm_page_prot))
return -EAGAIN;
...
}