Chinaunix首页 | 论坛 | 博客
  • 博客访问: 231140
  • 博文数量: 27
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 213
  • 用 户 组: 普通用户
  • 注册时间: 2015-06-10 22:38
文章分类

全部博文(27)

文章存档

2016年(1)

2015年(26)

分类: LINUX

2015-08-16 23:00:02

    刚刚在论坛里看到有个哥们问用户进程如何访问物理内存,其实可以借助内核提供的伪文件/dev/mem,我在这里也整理一下,方便以后参考。

    /dev/mem是物理内存的全映像,比如系统有4G的物理内存,就相当于存在一个4G大小的/dev/mem文件,通过映射该文件,即可完成物理内存到虚拟内存的映射,一般的使用方法如下:
    1. 获取/dev/mem的句柄
    fd = open("/dev/mem", O_RDWR | O_SYNC);
    2. 映射需要访问的物理内存
    virt_addr = mmap(NULL, len, PROT_READ|PROT|WRITE, MAP_SHARED, fd, phys_addr);
    说明:
    1) len: 要映射的长度
    2) fd: /dev/mem的句柄
    3) phys_addr: 要映射的物理内存地址
    4) virt_addr: 映射得到的虚拟地址
    3. 像访问其他地址一样,来访问映射后的虚拟地址
    比如:data = *(char *)vrit_addr, 读取virt_addr处内存中的内容
        
    以上就是整个方法的使用过程,后续会分析/dev/mem的实现原理。
    如有错误请帮忙指正。
阅读(3753) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~