浅谈mmap()和ioremap()的用法与区别

一、mmap()
mmap()函数是用来将设备内存线性地址映射到用户地址空间。
(1)首先映射基地址,再通过偏移地址寻址;
(2)unsigned char *map_cru_base=(unsigned char * )mmap(NULL, MAP_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, dev_fd, CRU_BASE);
       *(volatile unsigned int *)(map_cru_base+ CRU_OFFSET) = 0xffff0180;

二、ioremap
ioremap()函数是用来将物理地址转换为虚拟地址。
(1)volatile unsigned long *cru = NULL;
(2)volatile unsigned long *gpacru = NULL;
(3)cru = (volatile unsigned long *)ioremap(0xff760000, 0xffe);
(4)gpacru = cru+111;
注意:cru的地址为0xff760000,gpacru的基地址为0xff760378,由于0xff760378和0xff760000之间相差888,而(4)中每+1时,相当于多寻址1个字节(即:8位),此时有888/8=111,所以gpacru = cru+111。但是此时我们想要的是把0xff76037c地址处的数据改为0xffff01c0,而cru+111只能寻址到0xff760378,cru+112只能寻址到0xff760380,但是我们可以通过*gpacru = 0xffff01c000000d0a来改写0xff76037c地址处的数据。

时间: 2024-08-29 01:58:27

浅谈mmap()和ioremap()的用法与区别的相关文章

转 浅谈C++中指针和引用的区别

浅谈C++中指针和引用的区别 浅谈C++中指针和引用的区别 指针和引用在C++中很常用,但是对于它们之间的区别很多初学者都不是太熟悉,下面来谈谈他们2者之间的区别和用法. 1.指针和引用的定义和性质区别: (1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已.如: int a=1;int *p=&a; int a=1;int &b=a; 上面定义了一个整形变量和一个指针变量p,该指针变量指向a

【转】浅谈Nginx负载均衡与F5的区别

前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务. 其实Nginx和F5这两者均可用作网站负载均衡,那二者有什么区别呢?笔者在此浅谈下Nginx与F5的一些区别. 目前很多网站或应用在设计之初都会为高并发的数据请求做负载均衡,不差钱的土豪用户一般会直接买F5硬件设备作为其负载均衡器,原因不用多

浅谈Nginx负载均衡与F5的区别

转自:http://www.cnblogs.com/brookzhang/p/6600861.html 前言 笔者最近在负责某集团网站时,同时用到了Nginx与F5,如图所示,负载均衡器F5作为处理外界请求的第一道"墙",将请求分发到web服务器后,web服务器上的Nginx再进行处理,静态内容直接访问本地门户,动态数据则通过反向代理指向内网服务. 其实Nginx和F5这两者均可用作网站负载均衡,那二者有什么区别呢?笔者在此浅谈下Nginx与F5的一些区别. 目前很多网站或应用在设计之

浅谈C#中堆和栈的区别(附上图解)

线程堆栈:简称栈 Stack 托管堆: 简称堆 Heap 使用.Net框架开发程序的时候,我们无需关心内存分配问题,因为有GC这个大管家给我们料理一切.如果我们写出如下两段代码: 代码段1: public int AddFive(int pValue) { int result; result = pValue + 5; return result; } 代码段2: public class MyInt { public int MyValue; } public MyInt AddFive(i

浅谈Java中set.map.List的区别

就学习经验,浅谈Java中的Set,List,Map的区别,对JAVA的集合的理解是想对于数组: 数组是大小固定的,并且同一个数组只能存放类型一样的数据(基本类型/引用类型),JAVA集合可以存储和操作数目不固定的一组数据. 所有的JAVA集合都位于 java.util包中! JAVA集合只能存放引用类型的的数据,不能存放基本数据类型. JAVA集合主要分为三种类型: Set(集) List(列表) Map(映射) Collection 接口 :Collection是最基本的集合接口,声明了适用

浅谈mmap()

原型: #include <sys/man.h> void * mmap(void *addr, size_t len, int port, int flag, int fildes) 参数fd为即将映射到进程空间的文件描述字,一般由open()返回,同时,fd可以指定为-1,此时须指定flags参数中的MAP_ANON,表明进行的是匿名映射(不涉及具体的文件名,避免了文件的创建及打开) 实际上目前的glibc 对malloc的实现,当malloc分配大于128K的内存时候,就是通过mmap实

VC++ 浅谈VS2010中CMFCToolBar的用法

本文将给大家介绍Visual Studio 2010中CMFCToolBar的用法,CMFCToolBar可以让用户自定义工具栏图标,使用静态成员函数SetUserImages()将一个CMFCToolBarImages对象设置进去,由所有CMFCToolBar对象共享. AD: 自从VS2008中增加了一些特性的菜单,但这些特性在帮助中说明的很少,给使用者造成了很多麻烦.笔者经过搜索以及自己的摸索,对其的用法有了初步了解,形成本文,如果能够为后来者解决一些问题,笔者将会感到欣慰. 一.向导自动

由jtable浅谈vector&lt;vector&lt;Object&gt;&gt;的用法(转自a718515028的专栏)

以前只用过vector<Object>  ,但是在做从数据库导出数据放到jtable中时,发现还有个vector<vector<Object>>的用法. 先说jtable和DefaultTableModel jtable本身是可以显示一张列表,但是不能按钮监听的增加正行数据. jtable中没有addRow(Object[] rowData) 或者addRow(Vector rowData) ,方法. 但是jtable中有一个构造方法,JTable(TableModel

浅谈Listview中Adpter的用法

一.Adpter用法: Adpter是连接后端数据与前端显示的适配器接口,是数据和UI(view)之间一个重要的纽带. 数据源       Adpter      Listview public class TaskListAdapter extends BaseAdapter 其中,BaseAdpter是一个继承类,继承他需要实现更多的方法,所以有更大的灵活性. 而ArrayAdpter支持泛型操作,只能显示一行字. SimpleAdapter有最好的扩充性,可以自定义出各种效果. Simpl