(一)学习linux驱动之初,对ioremap函数的个人理解

(二)博客:实验探究 ioremap 这篇文章作者通过验证来阐述自己的观点,个人觉得挺好的
(三)函数原型
基本简介
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
void *ioremap(unsigned long phys_addr, unsigned long size)
入口: phys_addr:要映射的起始的IO地址;
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志;
phys_addr:是要映射的物理地址
size:是要映射的长度,单位是字节
头文件:io.h
(四)个人理解使用:
gpfcon = (volatile unsigned long *)ioremap(0x56000050,   16);
gpfdat = gpfcon + 1;
 
1. 从上面我们映射的起始地址为0x56000050也就是寄存器GPFCON的地址
2. 映射长度为16字节,也就是映射地址从:0x56000050~0x5600005C 地址全部映射完了
3. gpfdat = gpfcon + 1;的意思是 0x56000050 + 4 = 0x56000054 其地址是寄存器GPFDAT的地址
4. 为什么是加4呢,因为这个是指针加1,unsigned long的字节长度为4,指针加1,其地址就加4

 
(五)从上面的可以看出,假如我们只使用GPFCON和GPFDAT寄存器的话,我们也可以这样写
gpfcon = (volatile unsigned long *)ioremap(0x56000050,   8);
gpfdat = gpfcon + 1;
 
或者:
gpfcon = (volatile unsigned long *)ioremap(0x56000050,  4);
gpfdat = (volatile unsigned long *)ioremap(0x56000054,  4);
 
查看百度百科的解释可能会更好的理解

 
(六)当我们需要解除映射的虚拟地址时候我们需要使用函数iounmap();
释放上面映射的地址使用示例:
iounmap(gpfcon);      

最新文章

  1. iOS快速集成友盟社会化分享功能(v6.1.1)
  2. CentOS6.3搭建Nginx代理访问MongoDB GridFS图片资源
  3. 详解一个自己原创的正则匹配IP的表达式
  4. DirectShow开发快速入门之慨述
  5. 献给广大it从业人士:早睡早起,晚睡也早起
  6. Supervisor 的配置与使用
  7. 【阿里云产品公测】给ACE的建议
  8. Java Script基础(十二) 正则表达式
  9. springmvc 数据对象回绑
  10. jdk1.8.0_101/bin下各文件解释
  11. ural1018(树形dp)
  12. dd的用法
  13. 02 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目之Service层
  14. OpenGL渲染管线(rendering pipeline)
  15. 新版本的Python问题
  16. Beta阶段 - 博客链接合集
  17. select 多选 (EasyUI)
  18. hdu5029 Relief grain
  19. boost--日期处理
  20. 【ATcoder】Xor Sum 2

热门文章

  1. Yii2 设计模式——单例模式
  2. Destination高级特性
  3. oracle 数据库 主键索引重建
  4. 应用人员反馈报错,ORA-03137: TTC protocol internal error : [12333]
  5. (三)自定义Realm
  6. Spring 后台方法 重定向 与 转发
  7. ORACLE:锁被未决分布式事务处理 18.27.160617 持有
  8. 使用layer.open 父页面获取子页面输入文本框中的值
  9. Linux 命令行:cURL 的十种常见用法
  10. VBA算术运算符