linux – 如何确定设备内存的页框号?

linux – 如何确定设备内存的页框号?,第1张

概述参见英文答案 > How does one determine the page frame number for device memory?                                    1个 如何确定设备内存的页面帧号?来自LDD3 / Ch. 15 /“使用remap_pfn_range”和“简单实现”部分,pfn等同于vm_pgoff字段.我很困惑.怎么会这样? 参见英文答案 > How does one determine the page frame number for device memory?                                    1个
如何确定设备内存的页面帧号?来自LDD3 / Ch. 15 /“使用remap_pfn_range”和“简单实现”部分,pfn等同于vm_pgoff字段.我很困惑.怎么会这样?

请注意,vm_pgoff描述为:

The offset of the area in the file,in pages. When a file or device is
mapped,this is the file position of the first page mapped in this
area.

因此,如果映射的第一页对应于文件的第一页(我认为这很常见),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;...}
解决方法 venk,我只是个新手.
我对你的问题非常好奇,而且我已经阅读了你在linux设备驱动程序中指出的部分.

我应该推荐另一本书,专业linux内核架构.
有关mmap的一些细节在那里描述.

从上面的书中可以看出,在调用函数simple_remap_mmap()之前,有一些转换为vm-> vm_pgoff,这在linux内核源代码中是不存在的.

所以,即使vm_pgoff为0,在对它进行一些转换之后,该成员变量vm_pgoff中可能存在正确的值.

以下代码存在于linux内核源代码3.3.5中

#ifdef CONfig_DEVKMEMstatic int mmap_kmem(struct file *file,struct vm_area_struct *vma){    unsigned long pfn;    /* Turn a kernel-virtual address into a physical page frame */    pfn = __pa((u64)vma->vm_pgoff << PAGE_SHIFT) >> PAGE_SHIFT;   <----- Here    /*     * RED-PEN: on some architectures there is more mapped memory than     * available in mem_map which pfn_valID checks for. Perhaps should add a     * new macro here.     *     * RED-PEN: vmalloc is not supported right Now.     */    if (!pfn_valID(pfn))        return -EIO;    vma->vm_pgoff = pfn;    return mmap_mem(file,vma);}#endif
总结

以上是内存溢出为你收集整理的linux – 如何确定设备内存的页框号?全部内容,希望文章能够帮你解决linux – 如何确定设备内存的页框号?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1025675.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存