如何确定设备内存的页面框号?从LDD3/第15章/“使用remap_pfn_range”和“一个简单的实现”部分中,pfn被等同于vm_pgoff字段。我感到困惑。这怎么可能呢?
请注意,vm_pgoff被描述为:
文件中区域的偏移量,以页为单位。当文件或设备映射时,这是第一个映射在此区域中的页面的文件位置。
因此,如果第一个映射的页面与文件的第一页对应(我认为这很常见),那么vm_pgoff将为0。如果是这样,似乎这不是remap_pfn_range()函数的pfn参数的正确值。我错过了什么?正确的价值是多少?为了方便参考,我在下面重复了来自LDD3的相关代码(第426页)。
请注意,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;
...
}