Linux驱动之内存映射
发布日期:2021-09-08 22:55:19 浏览次数:24 分类:技术文章

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

  本文参考了http://www.cnblogs.com/geneil/archive/2011/12/08/2281222.html。本文作为学习总结,将主要过程简要描述。

  很多驱动实现某些功能都要通过内存映射。

  linux下,内存映射通过mmap系统调用实现:

void *mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

  该系统调用的作用,是将文件描述符fd所对应的文件中的一段内容映射到用户进程的地址空间中。对于设备文件(假设设备名为dev)来讲,该系统调用会调用对应驱动的dev_mmap函数:正如open等系统调用对应dev_open这样的驱动内部实现函数。

  参考文章中实现了一个简单的字符设备memdev。该内存设备在初始化时使用kmalloc向内核申请一段内存,这段内存位于物理地址映射区,只需简单地通过PAGE_SHIFT宏就可以获得物理地址.在驱动的memdev_mmap函数中,调用remap_pfn_range函数创建页表,映射到物理地址,这样就实现了内存空间和用户空间的内存映射了。

  另外还有些地方有待进一步了解。remap_pfn_range的函数原型,参数pfn是“physical address of kernel memory"。那么如果不是这种虚拟的字符设备,而是一个真正具有存储功能的外接设备,如果要实现内存映射,是否先要把它们的物理地址简单映射到这块内核物理地址(由系统),再使用remap_pfn_range呢,还是有别的方法?以后再补充吧。

 

转载于:https://www.cnblogs.com/zhizhizhiyuan/p/3647365.html

转载地址:https://blog.csdn.net/weixin_34341229/article/details/93414082 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:微信公众平台开发文档 获取用户基本信息
下一篇:技巧方法 - CentOS6将Python2.6.6升级到Python2.7.6

发表评论

最新留言

不错!
[***.144.177.141]2024年03月28日 08时26分00秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章