- 论坛徽章:
- 0
|
回复 2# EZWORD
谢谢你的回答~~
不过我还是有些地方不明白:
LDD3在使用remap_pfn_range 为一段物理地址新建也表时,有一段代码
static int simple_remap_mmap(struct file *filp, struct vm_area_struct *vma)
{
if (remap_pfn_range(vma,vma->vm_start, vm->vm_gpoff, vm->vm_end - vm_->start, vma->vm_page_prot) )
return -EAGAIN;
vma->vm_ops = &simple_remap_vm_ops;
simple_vma_open(vma);
return 0;
}
LDD3中在对函数 remap_pfn_range ( struct vm_area_struct *vma, unsigned long virt_addr, unsigned long pfn, unsigned long size, pgport_t *port);
中的unsigned long pfn 参数的描述是: 与物理内存对应的页帧号,虚拟内存将要被映射到该物理内存上。
而在对vm_area_struct 结构的 unsigned long vm_pgoff 变量的描述是:
以页为单位,文件中该区域的偏移量。当映射一个文件或者设备时,它是该区域中被映射的第一页在文件中的位置
为什么在上述代码中会传递 vm_gpoff ?
vm_gpoff 是相对于文件头的一个偏移量,而pfn 需要的物理地址页帧号,不是一个绝对量么(至少不是相对于文件头的一个量)? |
|