<div class="container clearfix"><main><article><h1 class="csdn_top">Linux中的mmap的使用</h1><div class="article_bar clearfix"><div class="artical_tag"><span class="original">原创                </span><span class="time">2016年03月26日 16:36:57</span></div><ul class="article_tags clearfix csdn-tracking-statistics tracking-click" data-mod="popu_377" style="display: none;"><li class="tit">标签:</li><!--          [startarticletags]--><!--          [endarticletags]--></ul><ul class="right_bar"><li><button class="btn-noborder"><i class="icon iconfont icon-read"></i><span class="txt">976</span></button></li><li class="edit" style="display: none;"><a class="btn-noborder" href="http://write.blog.csdn.net/postedit/50987550"><i class="icon iconfont icon-bianji"></i><span class="txt">编辑</span></a></li><li class="del" style="display: none;"><a class="btn-noborder" onclick="javascript:deleteArticle(fileName);return false;"><i class="icon iconfont icon-shanchu"></i><span class="txt">删除</span></a></li></ul></div><div id="article_content" class="article_content csdn-tracking-statistics tracking-click" data-mod="popu_519" data-dsm="post" style="height: 843px; overflow: hidden;"><p>利用ioremap访问硬件,需要经过两次拷贝</p>
<p>1.明确:不管是在用户空间还是在内核空间,软件一律不能去直接访问设备的物理地址;</p>
<p><br></p>
<p>2.在内核驱动中如果要访问设备的物理地址,需要利用ioremap将设备的物理地址映射到内核虚拟地址上(动态内存映射区),以后驱动程序访问这个内核虚拟地址就是在间</p>
接得访问设备的物理地址(MMU,TLB,TTW)<br><p><br></p>
<p>3.如果用户要访问硬件设备,不能直接访问,也不能在用户空间访问,只能通过系统调用(open,close,read,write,ioctl)来访问映射好的内核虚拟</p>
<p>地址,通过这种间接的访问来访问硬件设备,但是如果设计到数据的拷贝,还需要借助4个内存拷贝函数!</p>
<p><br></p>
<p><br></p>
<p>1.通过以上的分析,发现应用程序通过read,write,ioctl来访问硬件设备,它们都要经过两次的数据拷贝,一次是用户空间和内核空间的数据拷贝,另外一次是内核空间和硬件之<br>
间的数据拷贝,如果设备拷贝的数据量比较小,那么read,write,ioctl的两次数据拷贝的过程对系统的影响几乎可以忽略不计,如果设备的数据量非常大,例如显卡(独立),<br>
LCD屏幕(显存共享主存),摄像头,声卡这类设备涉及的数据量比较庞大,如果还是用read,write,ioctl进行访问设备数据,无形对系统的性能影响非常大。<br><br></p>
<p>2.用户访问设备,最终其实涉及的用户和硬件,而read,write,ioctl本身会牵扯到内核,所以这些函数涉及2次的数据拷贝,用户要直接去访问硬件设备,只需要将硬件<br>
设备的物理地址信息映射到用户的虚拟地址空间即可,一旦完毕,不会在牵扯到内核空间,以后用户直接访问用户的虚拟地址就是在访问设备硬件,由2次的数据拷贝的</p>
<p>转换为一次的数据拷贝。</p>
<p><br></p>
<p>目的:将硬件物理地址映射到用户虚拟地址空间,由2次数据拷贝变成1次数据拷贝!<br></p>
<p><br></p>
<p><img src="https://img-blog.csdn.net/20160326164508627?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt=""><br></p>
<p>用户空间3G虚拟内存区域的划分:<br>
高地址开始:<br>
栈区         <span style="white-space:pre;"></span> ↓<br>
MMAP内存映射区(相当于内核中的动态内存映射区)   ↓<br><br><br>
堆区<span style="white-space:pre;"> </span>     ↑<br>
BSS段区<br>
DATA段区<br>
TEXT段区 <br></p>
<p><br></p>
<p><br></p>
<p>在内核中如何描述一个进程:<br><span style="white-space:pre;"></span>内核中,无论描述进程还是线程都用task_struct  描述。在Linux系统里面,是没有线程这个概念的,    Linux的线程是模仿windows的,windows的进程和线程    <br>
有本质上的区别,Linux下没有区别,仅限的区别在于访问的地址空间不一样。mm_struct描述每个进程的3G用户空间<br></p>
<p><br></p>
<p><br></p>
<p>MMAP内存映射区作用:<br>
让用户程序直接访问设备内存,在要求高性能的应用当中比较常用。应用程序使用的动态库映射到这个区域;<br>
应用程序调用mmap,将设备物理地址和这个区域的虚拟内存进行映射;<br>
mmap映射内存必须是页面大小的整数倍(也就是字节/4K)<br><br>
结论:linux系统通过mmap来实现将物理地址映射到用户3G的MMAP内存映射区上的虚拟内存上!<br><br><br>
mmap系统调用的过程:<br>
void *addr;<br>
addr = mmap(0,0x1000, PROT_READ|PROT_WRITE,<br><span style="white-space:pre;"></span>MAP_SHARED, fd, 0);<br>
参数1:如果是0,内核帮找一块内存区域,起始地址是返回值addr<br>
参数2:虚拟内存的大小,0x1000一页(如果申请的内存空间没有对齐,内核会帮我们对齐,会经过一次if/else判断,浪费开销)<br>
参数3:权限<br>
参数4:权限<br>
参数5:fd,将该文件映射到该区域<br>
参数6:映射的偏移量<br><br><br>
1.应用程序调用mmap首先调用C库的mmap<br>
2.C库的mmap保存mmap的系统调用号到R7中,然后调用svc触发软中断异常(陷入内核空间)<br>
3.内核启动时,已经初始化好了异常向量表,触发软中断,跳转到软中断的异常向量表的入口地址vector_swi.<br>
4.根据R7保存的系统调用号,以它索引,在内核的系统调用表找到对应的函数sys_mmap,然后调用内核实现的sys_mmap<br>
5.sys_mmap内核会做两件事:<br>1.首先在当前进程的MMAP内存映射区中找一块空闲的虚拟内存区域;<br>2.一旦找到以后,利用struct   vm_area_strcut结构创建一个对象来描述这块空闲的虚拟内存区域;<br>
6.sys_mmap最终调用底层驱动的mmap,然后将描述空闲虚拟内存区域的对象指针传递给底层驱动的mmap函数使用;<br>
7.底层驱动的mmap根据传递过来的虚拟内存区域的信息获取用户要映射的虚拟地址,再根据某些函数建立用户虚拟地址和物理地址的映射关系<br>
8.一旦建立映射,mmap函数返回,返回值保存着这块空闲内存区域的起始地址,以后用户在用户空间就可以为所欲为了!<br><br>
内核利用struct vm_area_strcut描述找的虚拟内存区域<br>
struct vm_area_struct {<br><span style="white-space:pre;"></span>struct mm_struct *vm_mm ;<br><span style="white-space:pre;"></span>unsigned long vm_start;//空闲虚拟内存的起始地址<br><span style="white-space:pre;"></span>unsigned long vm_end;//结束地址<br><span style="white-space:pre;"></span>pgprot_t vm_page_prot; //访问权限<br><span style="white-space:pre;"></span>unsigned long vm_flags; //虚拟内存区域标志<br><span style="white-space:pre;"></span>unsigned long vm_pgoff;//偏移量<br>
};<br><br>
struct file_operations :<br>
int (*mmap)(struct file *filp,<br><span style="white-space:pre;"></span>struct vm_area_struct *vma) ;<br><br><br>
vma:内核帮忙找的空闲的内存区域,描述内存区域的信息<br><br><br>
9.驱动mmap利用一下函数建立映射(用户虚拟地址和物理地<br><br><br>
址)<br>
int remap_pfn_range(struct vm_area_struct*vma,<br><span style="white-space:pre;"></span>unsigned long addr,<br><span style="white-space:pre;"> </span>unsigned long pfn, <span style="white-space:pre;">
</span><br><br><br>
unsigned size,pgprot_t prot);<br>
vma: 用户虚拟内存区域指针 <br>
addr: 用户虚拟内存起始地址->vma->vm_start<br>
pfn: 要映射的物理地址所在页帧号,可以通过物理地址>>12得到<br>
size: 待映射的内存区域的大小<br>
prot: vma的保护属性vma->vm_page_prot<br>
功能:建立已知的用户虚拟内存和已知的物理地址之间的映射关系;<br>
注意:利用这个函数进行地址映射的时候,不管是物理地址还是用户虚拟地址都要求是页的整数倍!<br>
1页=4K=0x1000<br>
0xe0200080这个GPIO寄存器地址不是页的整数倍!<br>
通过芯片手册可知GPIO使用的地址空间范围:<br>
0xE0200000 ~ 0xE02FFFFF<br>
映射时指定的物理地址应该是:0xE0200000(页的整数倍)<br>
访问0xe0200080:用户虚拟地址 + 0x80<br>
访问0xe0200084:用户虚拟地址+ 0x84<br><br><br>
注意:一个物理地址同时可以映射到内核的虚拟地址上,还可以映射到用户的虚拟地址上!<br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><br></p>
<p><span style="color:#ff0000;">mmap自己理解:首先在用户空间通过mmap将物理内存地址映射到用户虚拟地址addr,addr是一个返回的虚拟地址,可以通过这个虚拟地址去控制硬件。在底层驱动方面,需要配置mmap参数,运用remap_pfn_renge函数将设备的物理内存与mmap的虚拟内存相连接,至此就可以在用户空间控制硬件。在映射地址时,物理地址应该是:0xE0200000(页的整数倍)<br>
访问0xe0200080:用户虚拟地址 + 0x80<br>
访问0xe0200084:用户虚拟地址+ 0x84<br>一个物理地址同时可以映射到内核的虚拟地址上,还可以映射到用户的虚拟地址上!<br><br><br>
当访问的文件比较小时,可以用read、write,<br>文件比较大时,用mmap</span><br></p></div></article><div class="readall_box csdn-tracking-statistics tracking-click" data-mod="popu_376"><div class="read_more_mask"></div><a class="btn btn-large btn-gray-fred read_more_btn" target="_self">阅读全文</a></div><div class="article_copyright">版权声明:本文为博主原创文章,未经博主允许不得转载。      </div><ul class="article_collect clearfix csdn-tracking-statistics tracking-click" data-mod="popu_378" style="display: none;"><li class="tit">本文已收录于以下专栏:</li>
<!--          [startarticlecolumns]--><!--          [endarticlecolumns]--></ul><div class="comment_box clearfix"><div id="comment_form"><div id="commentsbmitarear"><div class="comment_area clearfix" style="height: 60px;"><div class="userimg"><a href="http://my.csdn.net/qq_21435127"><img src="https://avatar.csdn.net/3/4/5/3_qq_21435127.jpg"></a></div><form action="http://blog.csdn.net/qq_28090573/phoenix/comment/submit?id=50987550" method="post" onsubmit="return subform(this);" id="commentform"><textarea class="comment_content" name="comment_content" id="comment_content" placeholder="发表你的评论" style="height: 40px;"></textarea><div class="bot_bar clearfix" style="opacity: 0;"><div id="ubbtools" class="add_code"><a href="#insertcode" code="code" target="_self"><i class="icon iconfont icon-daima"></i></a></div><input type="hidden" id="comment_replyId" name="comment_replyId"><input type="hidden" id="comment_userId" name="comment_userId" value=""><input type="hidden" id="commentId" name="commentId" value=""><input type="submit" class="btn btn-redborder" value="发表评论"><span id="tip_comment" class="tip"><div style="display: none;" class="csdn-tracking-statistics tracking-click" data-mod="popu_384"><a href="#" target="_blank" class="comment_area_btn">发表评论</a></div><div id="lang_list" code="code"><a href="#html" style="width:95px;" class="long_name" target="_self">HTML/XML</a><a href="#objc" style="width:95px;" class="long_name" target="_self">objective-c</a><a href="#delphi" style="width:58px;" class="zhong_name" target="_self">Delphi</a><a href="#ruby" class="zhong_name" target="_self">Ruby</a><a href="#php" target="_self">PHP</a><a href="#csharp" class="duan_name" target="_self">C#</a><a style=" border-right: none;" href="#cpp" class="duan_name" target="_self">C++</a><a style=" border-bottom:none;width:95px;" href="#javascript" class="long_name" target="_self">JavaScript</a><a style=" border-bottom:none;width:95px;" href="#vb" class="long_name" target="_self">Visual Basic</a><a style=" border-bottom:none;" href="#python" class="zhong_name" target="_self">Python</a><a style=" border-bottom:none;" href="#java" class="zhong_name" target="_self">Java</a><a style="border-bottom:none;" href="#css" class="duan_name" target="_self">CSS</a><a style="border-bottom:none;" href="#sql" class="duan_name" target="_self">SQL</a><a style="border:none; " href="#plain" class="duan_name" target="_self">其它</a><span class="arrb"></span></div></span></div></form></div></div></div></div><div class="comment_li_outbox"></div><div class="more_comment" style="display: none;"><div id="comment_bar" class="trackgin-ad" data-mod="popu_385"></div></div><!-- <h3 class="recommend_tit" id="related">相关文章推荐</h3> --><div class="recommend_list clearfix" id="rasss"><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/DLUTBruceZhang/article/details/9080173" target="_blank" strategy="BlogCommendFromBaidu_0">Linux 内存映射函数 mmap()函数详解</a></h2><div class="summary">一、概述          内存映射,简而言之就是将用户空间的一段内存区域映射到内核空间,映射成功后,用户对这段内存区域的修改可以直接反映到内核空间,同样,内核空间对这段区域的修改也直接反映用户空间。...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/DLUTBruceZhang" target="_blank" strategy="BlogCommendFromBaidu_0"><img src="https://avatar.csdn.net/4/9/E/3_dlutbrucezhang.jpg" alt="DLUTBruceZhang" title="DLUTBruceZhang"></a></li><li class="user_name"><a href="http://blog.csdn.net/DLUTBruceZhang" target="_blank">DLUTBruceZhang</a></li><li class="time">2013年06月12日 19:02</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>25937</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/angelbosj/article/details/8272887" target="_blank" strategy="BlogCommendFromBaidu_1">linux 中mmap的用法</a></h2><div class="summary">函数:void*mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize); 参数start:指向欲映...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/angelbosj" target="_blank" strategy="BlogCommendFromBaidu_1"><img src="https://avatar.csdn.net/9/2/7/3_angelbosj.jpg" alt="angelbosj" title="angelbosj"></a></li><li class="user_name"><a href="http://blog.csdn.net/angelbosj" target="_blank">angelbosj</a></li><li class="time">2012年12月08日 16:27</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>21385</span></li></ul></dd></dl><script>(function() {var s = "_" + Math.random().toString(36).slice(2);document.write('<div id="' + s + '"></div>');(window.slotbydup=window.slotbydup || []).push({id: '4765209',container: s,size: '808,120',display: 'inlay-fix'});})();</script><div id="_9jkxm20e77b7k2ckeihnqm2t9"></div><script charset="utf-8" src="http://pos.baidu.com/ecjm?di=4765209&dri=0&dis=0&dai=0&ps=4632x48&enu=encoding&dcb=___adblockplus&dtm=SSP_JSONP&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1514509288424&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1226x554&pss=1226x4655&cfv=0&cpl=27&chi=1&cce=true&cec=UTF-8&tlm=1514509288&rw=554&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&lcr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&ecd=1&uc=1366x728&pis=-1x-1&sr=1366x768&tcn=1514509288"></script><a href="http://www.baidu.com/cb.php?c=IgF_pyfqnHmknj64rH60IZ0qnfK9ujYzP1f4PjDs0Aw-5Hc3rHnYnHb0TAq15HfLPWRznjb0T1Y1ryf4nW7-mWnvPh7WPvcv0AwY5HDdnHfdnjbzrjm0IgF_5y9YIZ0lQzq-uZR8mLPbUB48ugfEIAqspynEmybknH0OIgwVgLPEIgFWuHdBUAqMnH00ThfqnWT0mhYqn0KsTWYs0ZNGujYkPHTYn1mk0AqGujYknWb3rjDY0APGujYLnWm4n1c0ULI85H00TZbqnW0v0APzm1YYnjbvP0" target="_blank"><dl class="clearfix csdn-tracking-statistics" data-mod="popu_393"><dt style="position: relative;"><img class="maxwidth" src="http://ubmcmm.baidustatic.com/media/v1/0f0007ZRku1Wt0jlqBwka6.jpg" alt="" title=""><img class="append_mark_img" style="display:block;position:absolute;left:0;bottom:0;width:30px;height:16px" src="https://img-blog.csdnimg.cn/2022010613002446196.png"></dt><dd><div class="summary"><h2>太任性!学AI的应届学弟怒拒20K Offer,他想要多少钱?</h2>  <div class="summary">AI改变命运呀!!前段时间在我司联合举办的校招聘会上,一名刚刚毕业的学弟陆续拒绝2份Offer,企业给出18K、23K高薪,学弟拒绝后直接来了一句...</div> </div></dd></dl>
</a><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/zhangchiytu/article/details/7539101" target="_blank" strategy="BlogCommendFromBaidu_2">linux mmap 内存映射</a></h2><div class="summary">Gralloc HAL的gralloc.cpp使用了mmap,如下:
static int init_pmem_area_locked(private_module_t* m)
1)打开PMEM,...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/zhangchiytu" target="_blank" strategy="BlogCommendFromBaidu_2"><img src="https://avatar.csdn.net/B/D/8/3_zhangchiytu.jpg" alt="zhangchiytu" title="zhangchiytu"></a></li><li class="user_name"><a href="http://blog.csdn.net/zhangchiytu" target="_blank">zhangchiytu</a></li><li class="time">2012年05月06日 11:47</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>2180</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/zqixiao_09/article/details/51088478" target="_blank" strategy="BlogCommendFromBaidu_3">Linux的mmap内存映射机制解析</a></h2><div class="summary">在讲述文件映射的概念时,
不可避免的要牵涉到虚存(SVR 4的VM).
实际上,
文件映射是虚存的中心概念, 文件映射一方面给用户提供了一组措施,
好似用户将文件映射到自己地址空间的某个部分,
使用...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/zqixiao_09" target="_blank" strategy="BlogCommendFromBaidu_3"><img src="https://avatar.csdn.net/D/F/D/3_zqixiao_09.jpg" alt="zqixiao_09" title="zqixiao_09"></a></li><li class="user_name"><a href="http://blog.csdn.net/zqixiao_09" target="_blank">zqixiao_09</a></li><li class="time">2016年04月07日 19:48</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>7606</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/MJ813/article/details/52082499" target="_blank" strategy="BlogCommendFromBaidu_4">Linux共享内存(mmap详解)</a></h2><div class="summary">mmap()系统调用使得进程之间通过映射同一个普通文件实现共享内存。普通文件被映射到进程地址空间后,进程可以向访问普通内存一样对文件进行访问,不必再调用read(),write()等操作。...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/MJ813" target="_blank" strategy="BlogCommendFromBaidu_4"><img src="https://avatar.csdn.net/2/3/9/3_mj813.jpg" alt="MJ813" title="MJ813"></a></li><li class="user_name"><a href="http://blog.csdn.net/MJ813" target="_blank">MJ813</a></li><li class="time">2016年08月01日 06:47</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>2508</span></li></ul></dd></dl><!-- 广告位:PC端-博客详情通栏7(feed流)-808*120 --><script>(function() {var s = "_" + Math.random().toString(36).slice(2);document.write('<div id="' + s + '"></div>');(window.slotbydup=window.slotbydup || []).push({id: '4983339',container: s,size: '808,120',display: 'inlay-fix'});})();</script><div id="_0rgsahgnttp81n4i2gst027qfr"></div><script charset="utf-8" src="http://pos.baidu.com/ecjm?di=4983339&dri=0&dis=0&dai=0&ps=5263x48&enu=encoding&dcb=___adblockplus&dtm=SSP_JSONP&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1514509288424&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1226x554&pss=1226x5286&cfv=0&cpl=27&chi=1&cce=true&cec=UTF-8&tlm=1514509288&rw=554&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&lcr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&ecd=1&uc=1366x728&pis=-1x-1&sr=1366x768&tcn=1514509289"></script><div id="_s51u2im2yae6u6mz9q1l9pb9" style="width: 100%;"><iframe width="760" frameborder="0" height="90" scrolling="no" src="http://pos.baidu.com/s?hei=90&wid=760&di=u3163359&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&exps=111000&dtm=HTML_POST&dri=0&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&dis=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&dai=1&tcn=1514509289&ant=0&cfv=0&ps=5263x48&ccd=24&pis=-1x-1&dc=2&psr=1366x768&col=zh-CN&drs=1&tlm=1514509288&cja=false&tpr=1514509288633&ari=2&par=1366x728&chi=1&cdo=-1&cce=true&cmi=45&pcs=1226x554&cpl=27&pss=1226x6049&cec=UTF-8"></iframe></div><script type="text/javascript" src="//mpb1.iteye.com/idvmcvvalgkcef.js"></script><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/ryder001/article/details/7966144" target="_blank" strategy="BlogCommendFromBaidu_5">mmap。</a></h2><div class="summary">linux mmap 内存映射
mmap() vs read()/write()/lseek()
通过strace统计系统调用的时候,经常可以看到mmap()与mmap2()。系统调用mmap()...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/ryder001" target="_blank" strategy="BlogCommendFromBaidu_5"><img src="https://avatar.csdn.net/A/1/A/3_ryder001.jpg" alt="ryder001" title="ryder001"></a></li><li class="user_name"><a href="http://blog.csdn.net/ryder001" target="_blank">ryder001</a></li><li class="time">2012年09月11日 10:40</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>17013</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/xxgxgx/article/details/50699289" target="_blank" strategy="BlogCommendFromBaidu_6">linux 中mmap的用法</a></h2><div class="summary">linux 中mmap的用法
函数:void *mmap(void *start,size_t length,int prot,int flags,int fd,off_t offsize);
...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/xxgxgx" target="_blank" strategy="BlogCommendFromBaidu_6"><img src="https://avatar.csdn.net/F/3/A/3_xxgxgx.jpg" alt="xxgxgx" title="xxgxgx"></a></li><li class="user_name"><a href="http://blog.csdn.net/xxgxgx" target="_blank">xxgxgx</a></li><li class="time">2016年02月19日 17:09</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>595</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/u014089131/article/details/54409900" target="_blank" strategy="BlogCommendFromBaidu_7">linux mmap用法:</a></h2><div class="summary">mmap定义如下:#include void *mmap(void *addr, size_t length, int prot, int flags,int fd, o...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/u014089131" target="_blank" strategy="BlogCommendFromBaidu_7"><img src="https://avatar.csdn.net/6/F/8/3_u014089131.jpg" alt="u014089131" title="u014089131"></a></li><li class="user_name"><a href="http://blog.csdn.net/u014089131" target="_blank">u014089131</a></li><li class="time">2017年01月13日 16:31</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>283</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/earbao/article/details/13758741" target="_blank" strategy="BlogCommendFromBaidu_8">linux c之mmap使用</a></h2><div class="summary">/* * File:   main.c* Author: root** Created on 2013年10月30日, 下午10:24*/#include
#include ...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/earbao" target="_blank" strategy="BlogCommendFromBaidu_8"><img src="https://avatar.csdn.net/4/9/F/3_earbao.jpg" alt="earbao" title="earbao"></a></li><li class="user_name"><a href="http://blog.csdn.net/earbao" target="_blank">earbao</a></li><li class="time">2013年10月30日 22:55</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>4113</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/lhf_tiger/article/details/9953275" target="_blank" strategy="BlogCommendFromBaidu_9">linux下mmap的使用</a></h2><div class="summary">共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空 间。进程A可以即时看到进程B对共享内存中数据的更新...                          </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/lhf_tiger" target="_blank" strategy="BlogCommendFromBaidu_9"><img src="https://avatar.csdn.net/7/F/C/3_lhf_tiger.jpg" alt="lhf_tiger" title="lhf_tiger"></a></li><li class="user_name"><a href="http://blog.csdn.net/lhf_tiger" target="_blank">lhf_tiger</a></li><li class="time">2013年08月13日 19:30</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>835</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/yinjiabin/article/details/7575653" target="_blank" strategy="BlogCommendFromBaidu_10">linux中mmap系统调用原理分析与实现</a></h2><div class="summary">1、mmap系统调用(功能)void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t o...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/yinjiabin" target="_blank" strategy="BlogCommendFromBaidu_10"><img src="https://avatar.csdn.net/9/5/7/3_yinjiabin.jpg" alt="yinjiabin" title="yinjiabin"></a></li><li class="user_name"><a href="http://blog.csdn.net/yinjiabin">yinjiabin</a></li><li class="time">2012年05月17日 11:48</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>14286</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/duanbeibei/article/details/1707911" target="_blank" strategy="BlogCommendFromBaidu_11">mmap()</a></h2><div class="summary">事例代码:
//------------------------------------------------mmap.c-------------------------------------...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/duanbeibei" target="_blank" strategy="BlogCommendFromBaidu_11"><img src="https://avatar.csdn.net/C/5/8/3_duanbeibei.jpg" alt="duanbeibei" title="duanbeibei"></a></li><li class="user_name"><a href="http://blog.csdn.net/duanbeibei">duanbeibei</a></li><li class="time">2007年07月25日 21:25</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>4645</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/xiaohuima_dong/article/details/44657871" target="_blank" strategy="BlogCommendFromBaidu_12">mmap函数用法及示例程序</a></h2><div class="summary">UNIX网络编程第二卷进程间通信对mmap函数进行了说明。该函数主要用途有三个:
1、将一个普通文件映射到内存中,通常在需要对文件进行频繁读写时使用,这样用内存读写取代I/O读写,以获得较高的性能;...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/xiaohuima_dong" target="_blank" strategy="BlogCommendFromBaidu_12"><img src="https://avatar.csdn.net/E/E/A/3_xiaohuima_dong.jpg" alt="xiaohuima_dong" title="xiaohuima_dong"></a></li><li class="user_name"><a href="http://blog.csdn.net/xiaohuima_dong">xiaohuima_dong</a></li><li class="time">2015年03月26日 22:38</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>2047</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/prike/article/details/73691183" target="_blank" strategy="BlogCommendFromBaidu_13">mmap 详解</a></h2><div class="summary">谨以此文纪念过往的岁月一.前言
mmap的具体实现以前在学习内核时学习过,但是对于其中的很多函数是一知半解的,有些只能根据其函数名来猜测其具体的功能,在本文中,一起来重新深入理解其具体的实现。...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/prike" target="_blank" strategy="BlogCommendFromBaidu_13"><img src="https://avatar.csdn.net/C/F/5/3_prike.jpg" alt="prike" title="prike"></a></li><li class="user_name"><a href="http://blog.csdn.net/prike">prike</a></li><li class="time">2017年06月24日 13:50</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>289</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/ebw123/article/details/50390342" target="_blank" strategy="BlogCommendFromBaidu_14">mmap:是什么 为什么 怎么用</a></h2><div class="summary">mmap基础概念mmap是一种内存映射文件的方法,即将一个文件或者其它对象映射到进程的地址空间,实现文件磁盘地址和进程虚拟地址空间中一段虚拟地址的一一对映关系。实现这样的映射关系后,进程就可以...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/ebw123" target="_blank" strategy="BlogCommendFromBaidu_14"><img src="https://avatar.csdn.net/6/F/1/3_ebw123.jpg" alt="ebw123" title="ebw123"></a></li><li class="user_name"><a href="http://blog.csdn.net/ebw123">ebw123</a></li><li class="time">2015年12月23日 23:06</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>772</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/FreeeLinux/article/details/58318656" target="_blank" strategy="BlogCommendFromBaidu_15">mmap内核源码分析</a></h2><div class="summary">对于mmap函数,我之前的理解太单一了。这几天好好复习了一下以前学过的知识,重新对该函数有了新的认识。之前我的认识是,mmap是用来映射内存的,它映射的内存来自磁盘上文件。所以我以为malloc函数底...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/FreeeLinux" target="_blank" strategy="BlogCommendFromBaidu_15"><img src="https://avatar.csdn.net/5/5/5/3_freeelinux.jpg" alt="FreeeLinux" title="FreeeLinux"></a></li><li class="user_name"><a href="http://blog.csdn.net/FreeeLinux">FreeeLinux</a></li><li class="time">2017年02月27日 22:47</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>561</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/supenman_mwg/article/details/12143775" target="_blank" strategy="BlogCommendFromBaidu_16">mmap的真正作用</a></h2><div class="summary">最近看了一些关于linux内核源代码解析的说,发现从内部机制对原来了解的一些linux内核的函数有了一些新的认识;
如 mmap.
函数定义及被包含的头文件如下:
#include
void...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/supenman_mwg" target="_blank" strategy="BlogCommendFromBaidu_16"><img src="https://avatar.csdn.net/9/8/7/3_supenman_mwg.jpg" alt="supenman_mwg" title="supenman_mwg"></a></li><li class="user_name"><a href="http://blog.csdn.net/supenman_mwg">supenman_mwg</a></li><li class="time">2013年09月28日 21:15</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>2195</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/yangle4695/article/details/52139585" target="_blank" strategy="BlogCommendFromBaidu_17">Linux 内存映射函数 mmap()函数详解</a></h2><div class="summary">mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。
头文件
函数原型...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/yangle4695" target="_blank" strategy="BlogCommendFromBaidu_17"><img src="https://avatar.csdn.net/4/1/F/3_yangle4695.jpg" alt="yangle4695" title="yangle4695"></a></li><li class="user_name"><a href="http://blog.csdn.net/yangle4695">yangle4695</a></li><li class="time">2016年08月07日 00:01</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>9154</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/Destina/article/details/6275082" target="_blank" strategy="BlogCommendFromBaidu_18">mmap</a></h2><div class="summary">mmap可以把磁盘文件的一部分直接映射到内存,这样文件中的位置直接就有对应的内存地址,对文件的读写可以直接用指针来做而不需要read/write函数。#include void *mmap(...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/Destina" target="_blank" strategy="BlogCommendFromBaidu_18"><img src="https://avatar.csdn.net/1/B/1/3_destina.jpg" alt="Destina" title="Destina"></a></li><li class="user_name"><a href="http://blog.csdn.net/Destina">Destina</a></li><li class="time">2011年03月24日 20:06</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>2891</span></li></ul></dd></dl><dl class="clearfix csdn-tracking-statistics" data-mod="popu_387" data-poputype="feed" data-feed-show="false" data-dsm="post"><dd><h2><a href="http://blog.csdn.net/dai_peixian/article/details/53671391" target="_blank" strategy="BlogCommendFromBaidu_19">linux下使用mmap映射的内存几时被释放的问题</a></h2><div class="summary">mmap()是一个非常重要的系统调用,这仅从mmap本身的功能描述上是看不出来的。从字面上看,mmap就是将一个文件映射进进程的虚拟内存地址,之后就可以通过操作内存的方式对文件的内容进行操作,上代码:...                    </div><ul><li class="avatar_img"><a href="http://blog.csdn.net/dai_peixian" target="_blank" strategy="BlogCommendFromBaidu_19"><img src="https://avatar.csdn.net/9/4/C/3_dai_peixian.jpg" alt="dai_peixian" title="dai_peixian"></a></li><li class="user_name"><a href="http://blog.csdn.net/dai_peixian">dai_peixian</a></li><li class="time">2016年12月15日 15:49</li><li class="visited_num"><i class="icon iconfont icon-read"></i><span>1332</span></li></ul></dd></dl></div></main>
<aside><div class="right_box user_info"><dl class="inf_bar clearfix"><dt class="csdn-tracking-statistics tracking-click" data-mod="popu_381"><a href="http://blog.csdn.net/qq_28090573" target="_blank"><img src="https://avatar.csdn.net/3/4/4/3_qq_28090573.jpg" class="avatar_pic"></a><span class="medals" title=""></span></dt><dd><h3 class="csdn-tracking-statistics tracking-click" data-mod="popu_380"><a href="http://blog.csdn.net/qq_28090573" target="_blank" id="uid">Paul_0920</a></h3><span class="csdn-tracking-statistics tracking-click" data-mod="popu_379"><a class="btn btn-redborder-small " id="span_add_follow" target="_self">+关注</a></span></dd></dl><div class="inf_number_box clearfix"><dl><dt>原创</dt><dd>40</dd></dl><dl><dt>粉丝</dt><dd id="fan">0</dd></dl><dl><dt>喜欢</dt><dd>13</dd></dl><dl><dt>码云</dt><dd><a class="thinFont" href="https://gitee.com?utm_source=csdn_blog" target="_blank">未开通</a></dd></dl></div><div class="writings"><div class="public_signal clearfix"><h3>他的最新文章</h3><a href="http://blog.csdn.net/qq_28090573" target="_blank" class="more"><span>更多文章</span></a></div><ul class="inf_list clearfix csdn-tracking-statistics tracking-click" data-mod="popu_382"><li class="clearfix"><a href="http://blog.csdn.net/qq_28090573/article/details/78733105" target="_blank">linux-i386(ubuntu)下编译安装gsoap_2.8.17过程记录</a></li><li class="clearfix"><a href="http://blog.csdn.net/qq_28090573/article/details/78730552" target="_blank">VMware虚拟机三种联网方式(图文详细解说)</a></li><li class="clearfix"><a href="http://blog.csdn.net/qq_28090573/article/details/78720922" target="_blank">IP组播技术介绍及实现例子</a></li><li class="clearfix"><a href="http://blog.csdn.net/qq_28090573/article/details/78717129" target="_blank">pthread_cleanup_push与pthread_cleanup_pop的目的 作用</a></li><li class="clearfix"><a href="http://blog.csdn.net/qq_28090573/article/details/78614666" target="_blank">嵌入式 Linux线程锁详解pthread_mutexattr_t【转】</a></li></ul></div></div><div class="extension_other csdn-tracking-statistics tracking-click" data-mod="popu_389" style="position: relative;"><!--u3032528--><div class="flashrecommend"><div id="_z9uq93bhla3mwpzo3p0c0udi" style=""><iframe width="300" frameborder="0" height="250" scrolling="no" src="http://pos.baidu.com/s?hei=250&wid=300&di=u3032528&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&ps=571x880&par=1366x728&dtm=HTML_POST&dis=0&exps=111000&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&tcn=1514509289&cec=UTF-8&ant=0&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&drs=1&cja=false&dri=0&pcs=1226x554&pis=-1x-1&cmi=45&pss=1226x6145&tpr=1514509288633&col=zh-CN&cpl=27&dai=2&tlm=1514509288&cce=true&psr=1366x768&cfv=0&ari=2&chi=1&ccd=24&dc=2&cdo=-1"></iframe></div><script type="text/javascript" src="http://mpb1.iteye.com/bwocoltlyzdec.js"></script></div><img class="append_mark_img" style="display:block;position:absolute;left:0;bottom:0;width:30px;height:16px" src="https://img-blog.csdnimg.cn/2022010613002446196.png"></div><!--    [StartShowSelfColumn]--><!--    [EndShowSelfColumn]--><div class="fixRight"><!-- 广告位:PC端-博客详情右侧视窗2(feed流)-300*300 --><script>(function() {var s = "_" + Math.random().toString(36).slice(2);document.write('<div id="' + s + '"></div>');(window.slotbydup=window.slotbydup || []).push({id: '5384130',container: s,size: '300,300',display: 'inlay-fix'});})();</script><div id="_nhvm532wbjxbqmvo732384cxr"></div><script charset="utf-8" src="http://pos.baidu.com/ecjm?di=5384130&dri=0&dis=0&dai=0&ps=571x880&enu=encoding&dcb=___adblockplus&dtm=SSP_JSONP&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1514509288424&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1226x554&pss=1226x6049&cfv=0&cpl=27&chi=1&cce=true&cec=UTF-8&tlm=1514509288&rw=554&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&lcr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&ecd=1&uc=1366x728&pis=-1x-1&sr=1366x768&tcn=1514509289"></script><div id="_sd1l8kv3ap1i2ulc9glanhfr" style=""><iframe width="300" frameborder="0" height="250" scrolling="no" src="http://pos.baidu.com/s?hei=250&wid=300&di=u3163270&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&tpr=1514509288633&dis=0&dc=2&cdo=-1&drs=1&cce=true&ari=2&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ps=841x880&par=1366x728&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&ant=0&tcn=1514509289&cpl=27&cja=false&dtm=HTML_POST&cfv=0&chi=1&col=zh-CN&dai=3&pss=1226x6145&psr=1366x768&dri=0&cmi=45&pcs=1226x554&tlm=1514509288&exps=111000&cec=UTF-8&pis=-1x-1&ccd=24"></iframe></div><script type="text/javascript" src="//mpb1.iteye.com/avneunkwbycx.js"></script><div class="extension_other csdn-tracking-statistics tracking-click bottomRcom" data-mod="popu_389" style="position: absolute; z-index: -5; opacity: 0; pointer-events: none; left: 878.182px;"><!--u3032528--><div class="flashrecommend"><!-- 请置于所有广告位代码之前 --><script src="http://dup.baidustatic.com/js/dm.js"></script><!-- 广告位:PC端-博客详情页右侧视窗1(feed流)-300*250 --><script>(function() {var s = "_" + Math.random().toString(36).slice(2);document.write('<div id="' + s + '"></div>');(window.slotbydup=window.slotbydup || []).push({id: '4770930',container: s,size: '300,250',display: 'inlay-fix'});})();</script><div id="_xcswythxc15orrb245xqd7vi"></div><script charset="utf-8" src="http://pos.baidu.com/ecjm?di=4770930&dri=0&dis=0&dai=0&ps=841x880&enu=encoding&dcb=___adblockplus&dtm=SSP_JSONP&dvi=0.0&dci=-1&dpt=none&tsr=0&tpr=1514509288424&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ari=2&dbv=2&drs=1&pcs=1226x554&pss=1226x6145&cfv=0&cpl=27&chi=1&cce=true&cec=UTF-8&tlm=1514509288&rw=554&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&lcr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e&ecd=1&uc=1366x728&pis=-1x-1&sr=1366x768&tcn=1514509289"></script><div id="_sc6g53bh2f99rphv49nxez5mi" style=""><iframe width="300" frameborder="0" height="250" scrolling="no" src="//pos.baidu.com/s?hei=250&wid=300&di=u3032528&ltu=http%3A%2F%2Fblog.csdn.net%2Fqq_28090573%2Farticle%2Fdetails%2F50987550&psr=1366x768&dis=0&pss=1226x3096&tcn=1514509289&pis=-1x-1&ti=Linux%E4%B8%AD%E7%9A%84mmap%E7%9A%84%E4%BD%BF%E7%94%A8%20-%20CSDN%E5%8D%9A%E5%AE%A2&ant=0&par=1366x728&drs=3&col=zh-CN&tlm=1514509288&dri=1&ccd=24&ari=2&dc=2&cmi=45&cdo=-1&chi=1&ps=1096x880&dtm=HTML_POST&cfv=0&exps=111000&cec=UTF-8&pcs=1226x554&cpl=27&cja=false&tpr=1514509288633&dai=4&cce=true&ltr=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3D9uWpF9GFLYJJqByDUvd5apeqcFsCaz-F8Sa_wFkBFHQJJhKV_qKn4gYmp2KnDrpEP4L-9tk98HxFX0LszsHaakFLVcaNS_7mVmNp9aSFLiK%26wd%3D%26eqid%3D85ab310c000361ad000000025a45936e"></iframe></div><script type="text/javascript" src="http://mpb1.iteye.com/bwocoltlyzdec.js"></script></div><img class="append_mark_img" style="display:block;position:absolute;left:0;bottom:0;width:30px;height:16px" src="https://img-blog.csdnimg.cn/2022010613002446196.png"></div></div><div class="user-hotArticle"><h3>他的热门文章</h3><ul class="hotArticle-list csdn-tracking-statistics tracking-click" data-mod="popu_521">
<!--            [StartHotArticles]--><li><a href="http://blog.csdn.net/qq_28090573/article/details/51094321" target="_blank">利用select/poll监听多个设备详解</a><div class="read list-left"><i class="icon iconfont icon-read"></i><span>1416</span></div></li><li><a href="http://blog.csdn.net/qq_28090573/article/details/50987550" target="_blank">Linux中的mmap的使用</a><div class="read list-left"><i class="icon iconfont icon-read"></i><span>950</span></div></li><li><a href="http://blog.csdn.net/qq_28090573/article/details/50867811" target="_blank">单片机和ARM的区别</a><div class="read list-left"><i class="icon iconfont icon-read"></i><span>863</span></div></li><li><a href="http://blog.csdn.net/qq_28090573/article/details/51249929" target="_blank">链表和二叉树</a><div class="read list-left"><i class="icon iconfont icon-read"></i><span>662</span></div></li><li><a href="http://blog.csdn.net/qq_28090573/article/details/50955304" target="_blank">Linux解决长时间占用CPU资源的方法(底半部)</a><div class="read list-left"><i class="icon iconfont icon-read"></i><span>611</span></div></li><!--            [EndHotArticles]--></ul></div>
<!--    [startcustom]--><!--    [endcustom]-->
</aside></div>

LCD显示深究day01 mmap知识补充相关推荐

  1. 北邮实验:ARM实验板移植Linux操作系统,LCD显示汉字

    ARM实验板移植Linux操作系统,LCD显示汉字 一. 实验目的 1. 熟悉点阵字库的使用2. 熟悉Linux操作系统的使用3. 熟悉ARM嵌入式系统开发的过程 二. 实验内容 1. pc端编写用* ...

  2. USB摄像头驱动--LCD显示摄像头图像(附Makefile分析)

    对于一个应用程序,最重要的是明白目的是什么:将摄像头的数据解析出来,按一帧一个图片的方式将数据传到LCD的Framebuffer中去(如果LCD没有自动将Framebuffer中的数据刷到LCD上还需 ...

  3. ES6 复习,知识补充

    ES6 知识补充 概念 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了. 它的目标,是使得 JavaScript 语 ...

  4. Python学习---django知识补充之CBV

    Django知识补充之CBV Django: url    -->  def函数      FBV[function based view]  用函数和URL进行匹配 url    --> ...

  5. Python菜鸟入门:day01基础知识

    写在前面: 此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 传送门: day01基础知识 day02知识分类 day03 ...

  6. 数码相框(五、使用freetype库在LCD显示几行文字)

    注:本人已购买韦东山第三期项目视频,内容来源<数码相框项目视频>,只用于学习记录,如有侵权,请联系删除. 1.在LCD显示几行文字 (1) 在LCD显示几行文字,我们分为两种显示方法: ① ...

  7. I.MX6ULL之LCD显示

    I.MX6ULL之LCD显示 代码放在git仓库,有需要的可以自行下载:Gitee LCD的操作原理: 在Linux系统中通过Framebuffer驱动程序来控制LCD.我们只需要知道怎么获取LCD的 ...

  8. 【Arduino实验12 1602 LCD显示】

    目录 一.实验目的 二.实验设备与环境 三.实验重点 四.实验难点 五.实验内容 5.1实验任务 5.2实验原理 5.3实验内容 5.4实验结果 5.5思考题 一.实验目的 (1)熟悉1602LCD液 ...

  9. 数码相框(三、LCD显示文字)

    注:本人已购买韦东山第三期项目视频,内容来源<数码相框项目视频>,只用于学习记录,如有侵权,请联系删除.     文字在LCD上的显示其实就是LCD上的一些点的显示与不显示,这些显示的点就 ...

最新文章

  1. 常见缓存算法和LRU与LFU的c++实现
  2. 在jsx中绑定js表达式以及jsx注释
  3. Python 基本输出
  4. 牛客网 【每日一题】5月29日 管道取珠
  5. Win10右键没有压缩选项的解决教程
  6. 华为否认今年将推出搭载鸿蒙系统手机;苹果或在 3 年内推出 5G 基带芯片;Node.js 12.12.0 发布 | 极客头条...
  7. zoj 3261 逆向并查集+离线处理
  8. AXURE RP EXTENSION FOR CHROME:AXURE RP铬延展剂--谷歌工具插件使用配置(打开并成功预览本地.html文件)
  9. 【调剂】2021年齐齐哈尔大学朱磊教授课题组招收通信与信息系统、电子信息相关专业硕士调剂...
  10. 前台使用viewbag
  11. 人机交互如何改变人类生活 | 公开课笔记
  12. 电信:自娱自乐的全员揽装,让人心寒!
  13. Redis(二)——复制
  14. Springboot企业邮箱发送邮件
  15. create connection SQLException, url: jdbc:mysql:///test, errorCode 1045, state 28000
  16. 【图神经网络】图数据和图数据相关任务
  17. 电脑用户名中文改英文步骤总结
  18. mysql导出数据到csv的方式
  19. 在网页上加QQ,MSN,skype,goolge TALK,雅虎通,贸易通,淘宝旺旺在线客服代码
  20. 第三部分 和弦铃声格式

热门文章

  1. 什么是数据仓库,何时以及为什么要考虑一个
  2. python 时间序列预测_使用Python进行动手时间序列预测
  3. 求一个张量的梯度_张量流中离散策略梯度的最小工作示例2 0
  4. 图深度学习-第1部分
  5. 特征工程之特征选择_特征工程与特征选择
  6. c# WebApi之接口返回类型详解
  7. Confluence 6 附件存储文件系统的分级
  8. Luogu P1031 均分纸牌(贪心)
  9. Install Docker Mac OS X
  10. httpsqs消息队列