当前位置: 技术问答>linux和unix
***对FRAMEBUFFER中用到的MMAP的严重质疑****
来源: 互联网 发布时间:2016-01-08
本文导语: 在映射FB显存到用户空间时,采用了: mem = mmap(0,srceen_size, PROT_READ | PROT_WRITE, MAP_SHARED,fb, 0); 一般的FB驱动都是调用FBMEM.C的默认mmap实现的也即: io_remap_page_range(vma_start,off,vma->vm_end - vma->vm_start, vma->vm_page_prot); ...
在映射FB显存到用户空间时,采用了:
mem = mmap(0,srceen_size, PROT_READ | PROT_WRITE, MAP_SHARED,fb, 0);
一般的FB驱动都是调用FBMEM.C的默认mmap实现的也即:
io_remap_page_range(vma_start,off,vma->vm_end - vma->vm_start, vma->vm_page_prot);
可是这个函数是用来给3G以上的系统空间建立映射表的,用户空间是无法访问这段地址的,这时对mem的读写都会产生异常啊。
实在不理解,为什么这样居然也可以让LCD工作,请高手解释一下,谢谢!
mem = mmap(0,srceen_size, PROT_READ | PROT_WRITE, MAP_SHARED,fb, 0);
一般的FB驱动都是调用FBMEM.C的默认mmap实现的也即:
io_remap_page_range(vma_start,off,vma->vm_end - vma->vm_start, vma->vm_page_prot);
可是这个函数是用来给3G以上的系统空间建立映射表的,用户空间是无法访问这段地址的,这时对mem的读写都会产生异常啊。
实在不理解,为什么这样居然也可以让LCD工作,请高手解释一下,谢谢!
|
io_remap_page_range()(实际上也即remap_page_range())并非专给3G以上的系统空间建立映射表的,而只是把物理地址映射到虚拟地址而已。
所以你所担心的问题不会发生。
所以你所担心的问题不会发生。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。