एलडीडी 3/सी से। 15/खंड "remap_pfn_range का उपयोग करना" और "एक सरल कार्यान्वयन", पीएफएन को 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;
...
}