ドライバーでの mmap 操作を理解しようとしています。mmap を行っている理由はわかっています。mmap の次の 2 つの実装と混同しています。
int my_mmap(struct file *filp, struct vm_area_struct *vma)
{
vma->vm_ops = &mmap_vm_ops;
vma->vm_flags |= VM_RESERVED;
/* assign the file private data to the vm private data */
vma->vm_private_data = filp->private_data;
mmap_open(vma);
return 0;
}
と
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;
vma->vm_ops = &simple_remap_vm_ops;
simple_vma_open(vma);
return 0;
}
最初の例は、ページ テーブルを変更しない単純な実装ですが、2 番目の例は変更します。
では、2番目のアプローチの根拠は何ですか。最初の例も適切に機能します。