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;
...
}