Linux 下面对物理地址的访问
参考链接:http://zhuhaibobb.blog.163.com/blog/static/2744006720101049030606/
Linux内核提供了/dev/mem驱动,提供了一种直接访问内存物理地址的方法,具体实施有两种方法,一是设备驱动,二是系统调用的方法。
/dev/mem驱动的源文件在drivers/char/mem.c中。这个文件还生成了一些常用的字符设备驱动,表现为/dev/zero,/dev/null等一些特殊的字符设备驱动。cat /dev/mem时,显示的是所有物理内存的地址以及内容信息,通常情况下,只有root用户对其有读写权限。
1. 像使用普通字符设备驱动一样使用/dev/mem.
2. 通过hexedit工具来直接查看/dev/mem,结果如下图:

最左边显示的是物理地址,右边的以4个字节为一组,一行4组,共16个字节。最右边显示的是各内存字节单元内容的ASCII码对于的字符信息。这个文件可以直接修改,按下tab键进入修改模式,按下F2键保存修改内容,修改实时生效。
3. 既然/dev/mem内是全部的内存信息,通过mmap系统调用,将物理内存地址映射到进程的地址空间,从而实现对内存物理地址的读写。
介绍一下,mmap系统调用。

addr:欲映射到地址空间的起始地址,通常设置为NULL,表示让系统自动选定。
length:想要映射的文件大小,以字节为单位。
prot:映射区域的保护方式,有以下几种。
PROT_EXEC:映射区域可执行。
PROT_READ: 映射区域可读。
PROT_WRITE:映射区域科学
PROT_NONE :映射区域不能被访问
flags:映射区域的一些特性,有以下几种。
MAP_FIXED 如果映射不成功则出错返回,
MAP_SHARED 对映射区域的写入数据会写回到原来的文件
MAP_PRIVATE 对映射区域的写入数据不会写回原来的文件
MAP_ANONYMOUS
MAP_DENYWRITE 只允许对映射区域的写入操作,其他对文件直接写入的操作将被拒绝
MAP_LOCKED 锁定映射区域
fd: open返回的文件描述符
offset:被映射文件的偏移量,表示从文件的哪个地方开始映射,一般设置为0.offset必须为4K的整数倍。
例子:要读取物理地址为0x35004000为基地址的,偏移为0x20的内容。fd为打开/dev/mem的文件描述符。ALLOC_SIZE为 1024.
map_base = mmap(0, ALLOC_SIZE, PROT_READ, MAP_PRIVATE, fd, 0x35004000);
type = READ_REG32(map_base + 0x20);
- ///….TO do what you want.
- close(fd);
- munmap(map_base, ALLOC_SIZE);
采用这种方法,可以实现用户空间的驱动。
Linux 下面对物理地址的访问的更多相关文章
- linux使用i/o内存访问外设
一.linux中访问外设的方法. 1.IO端口(IO port) linux系统给外设分配不同的端口号,linux利用端口号来访问设备(驱动) (cpu x86) cpu访问外设通过端号,访问通过地址 ...
- Linux虚拟地址和物理地址的映射
➤背景 一般情况下,Linux系统中,进程的4GB内存空间被划分成为两个部分------用户空间和内核空间,大小分别为0~3G,3~4G.用户进程通常情况下,只能访问用户空间的虚拟地址,不能访问到内核 ...
- linux测试noatime对文件访问时间的影响
linux测试noatime对文件访问时间的影响 文件(如abc)有3个时间: # stat abc Access: 2015-04-16 19:30:13.665970572 +0800 Modif ...
- Windows 与 Linux下关于端口不能访问的问题
自己写的一个HTTP文件服务器,在端口 50000上监听HTTP连接请求,在Eclipse里面将程序正常地启动之后,能够在自己的机器上(Eclipse启动该程序的机器上)访问 50000端口,即Fil ...
- Linux中用HttpWebRequest或WebClient访问远程https路径
要想在Linux中用HttpWebRequest或WebClient访问远程https路径,需要作如下处理: 1,更新linux根证书(只需一次,在安装mono或安装jexus独立版后执行) sudo ...
- Linux通过端口转发来访问内网服务(端口转发访问阿里云Redis数据库等服务)
# 安装rinetd wget http://www.boutell.com/rinetd/http/rinetd.tar.gz&&tar -xvf rinetd.tar.gz& ...
- LINUX安装好后无法访问网络
LINUX安装好后无法访问网络 在虚拟机安装好新的LINUX系统后,ping www.baidu.com ,发现无法ping通. 键入ifconfig查询配置: eno16777728: flags= ...
- Linux Centos 通过虚拟用户访问FTP的配置
Linux Centos 通过虚拟用户访问FTP的配置 实验需求: 让下面4个虚拟用户使用系统用户ftpvu的权限来连接到Linux FTP服务器,并确保都锁定在 自己的虚拟用户目录,不能切换到其他目 ...
- Linux上通过MySQL命令访问MySQL数据库时常见问题汇总
Linux上通过mysql命令访问MySQL数据库时常见问题汇总 1)创建登录账号 #创建用户并授权 #允许本地访问 create user 'test'@'localhost' identified ...
随机推荐
- 使用自定义的BaseAdapter实现LIstView的展示
http://stephen830.iteye.com/blog/1141394 使用自定义的BaseAdapter实现LIstView的展示 实现以下功能点: 1.通过自定义的BaseAdapter ...
- MySQL Router 测试使用 转
MySQL Router 测试使用 . 特性 MySQL Router 并没有包括一些特别新的特性, 总体上看中规中矩, 不过 first-available 和插件两个特性挺有意思, 后续会进行讲解 ...
- UNIX基础知识之用户标识
一.用户ID 口令文件(/etc/passwd)登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户.系统管理员在确定一个用户的登录名的同时,确定其用户ID.用户不能更改其用户ID ...
- UNIX基础知识之系统调用与库函数的区别与联系
上图为UNIX操作系统的体系结构.内核的接口被称为系统调用(system call),公用函数库构建在系统调用接口之上,应用软件既可以使用公用函数库,也可直接使用系统调用. 更详细的说明如下: 所有操 ...
- 小米2s使用Hexamob Recovery PRO恢复数据
这东西对于手机来说, 真是神器啊 现在很多手机都是以MTP连接到电脑的, 所以在PC上是看不到盘符, 也就无法使用finaldata 之类的工具恢复了. 而像小米2S这样的手机, 无法外接SD卡, 则 ...
- hello world of hibernate Annotation
1:建立所需要的类,如: package com.hibernate.model; import javax.persistence.Entity; import javax.persistence. ...
- Log4Net之初步了解
原创文章,转载必需注明出处:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/log4net%E4%B9%8B%E5%88%9D%E6 ...
- LeetCode 122
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- Web系统大规模并发----电商秒杀与抢购
原文链接请参见:http://uule.iteye.com/blog/2186786
- hdu 4340 树状DP
思路:我们定义两个数组,ant[Maxn][2],bob[Maxn][2].ant[i][0]表示还未确定哪个城市被全费用占领,ant[i][1]表示确定了哪个城市被全费用占领.那么ant[i][0] ...