对于mmap的疑问
看到一篇文章讲解普通文件使用mmap共享, 使用 mmap 系统调用就行了? 不需要自己实现这个函数么
记得在驱动里面有一个 mmap 的函数, 那这个mmap 实现 跟那个系统的mmap 有什么不同?? 不是一样的么,
[ 本帖最后由 star316 于 2009-3-4 16:04 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
系统调用mmap最终会调用驱动的mmap,普通文件能直接用是因为文件系统的驱动中实现了mmap调用,你可以在代码中搜到的,多数用了generic_file_mmap吧。
那就是说,假如自己写的设备驱动如果要使用MMAP 的话,需要自己写这个函数,?
一般来说是的,但对于网络设备,由于没有设备文件,不知道能不能搞。见有人用过另一种办法是通过/proc来把设备使用的物理地址导出来,然后通过/dev/mem来执行mmap,也是可以的。
驱动自己写mmap,应用层调用mmap的时候会向驱动中传递参数,驱动中根据参数判断应用层想要映射哪部分的内存(假设大小为x),然后返回页表信息,app保存这个返回值base,以后app访问base+x范围的时候,就可以访问到驱动中的内容了,应用层的mmap和驱动mmap不是一个东西哦,app在调用mmap是,系统内部会去调用相应drv中的mmap~
一般fpga的驱动程序都使用mmap直接把内核内存映射给应用层直接访问的