博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dev/kmem 和dev/mem的区别
阅读量:4212 次
发布时间:2019-05-26

本文共 791 字,大约阅读时间需要 2 分钟。

dev/kmem和dev/mem的区别在于dev/kmem 只能mmap kernel的low memory,而/dev/mem 可以映射4G范围内的memory
dev/kmem的mmap实现如下:
其中最重要的一行是360行的虚拟地址转物理地址。是通过直接减去offset来完成的,而只有kernel的low memory才可以这么计算.计算完之后,在373行调用和/dev/mem一样的函数来做映射.
355 static int mmap_kmem(struct file *file, struct vm_area_struct *vma)
356 {
357         unsigned long pfn;
358 
359         /* Turn a kernel-virtual address into a physical page frame */
360         pfn = __pa((u64)vma->vm_pgoff << PAGE_SHIFT) >> PAGE_SHIFT;
361 
362         /*
363          * RED-PEN: on some architectures there is more mapped memory than
364          * available in mem_map which pfn_valid checks for. Perhaps should add a
365          * new macro here.
366          *
367          * RED-PEN: vmalloc is not supported right now.
368          */
369         if (!pfn_valid(pfn))
370                 return -EIO;
371 
372         vma->vm_pgoff = pfn;
373         return mmap_mem(file, vma);
374 }

转载地址:http://ovcmi.baihongyu.com/

你可能感兴趣的文章
子序列和
查看>>
表排序(基于插入排序) C~
查看>>
C 计时器大全
查看>>
简易贪吃蛇 C ~
查看>>
C 语言 printf 用法
查看>>
排列(暴力穷举)
查看>>
蛇形填数
查看>>
UVa 340 猜数字游戏提示(Master-Mind-Hints)
查看>>
UVa1584 环状序列 (Circular Sequence)
查看>>
UVa 1225 分子量 (Molar Mass)ACM
查看>>
POJ 1005 I think I Need a Houseboat (水题)
查看>>
UVa 455 周期串 (Periodic Strings)
查看>>
习题 3-5 谜题 Puzzle (World Finals 1993) UVa 227
查看>>
习题3-6 纵横字谜的答案(Crossword Answers) UVa 232
查看>>
csp 俄罗斯方块
查看>>
UI控件-> Scroll Pane(滑动面板)
查看>>
UI控件 -> ListView
查看>>
CSP - 2017 -09 - 2 公共钥匙盒
查看>>
UI控件-> ListView(2)
查看>>
HDU1062 Text Reverse
查看>>