将一个IO地址空间映射到内核的虚拟地址空间上

物理地址

CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中内存的,但也常被映射到其他存储器上(如显存、bios等)

总线地址

外设使用的是地址总线,cpu使用的是物理地址。物理地址和总线地址之间的关系有系统设计决定的。在X86平台上,物理地址就是总线地址,这是因为它们共享相同的地址空间

虚拟地址

程序访问存储器所使用的逻辑地址称为虚拟地址

CPU启动保护模式后,程序运行在虚拟地址空间中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的

需要MMU的支持,把虚拟地址转换成物理地址

ioremap

#include <io.h>
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空间的和权限有关的标志

I/O读写

//read
unsigned int ioread8(void*addr);
unsigned int ioread16(void*addr);
unsigned int ioread32(void*addr);
//write
void iowrite8(u8value,void*addr);
void iowrite16(u16value,void*addr);
void iowrite32(u32value,void*addr);
//读一系列值到给定的I/O内存地址
void ioread8_rep(void *addr, void *buf, unsigned long count);
void ioread16_rep(void *addr, void *buf, unsigned long count);
void ioread32_rep(void *addr, void *buf, unsigned long count);
//写一系列值到给定的I/O内存地址
void iowrite8_rep(void *addr, const void *buf, unsigned long count);
void iowrite16_rep(void *addr, const void *buf, unsigned long count);
void iowrite32_rep(void *addr, const void *buf, unsigned long count);
//操作一块I/O地址
void memset_io(void *addr, u8 value, unsigned int count);
void memcpy_fromio(void *dest, void *source, unsigned int count);
void memcpy_toio(void *dest, void *source, unsigned int count);

最新文章

  1. requestAnimationFrame与setInterval,setTimeout
  2. laravel框架总结(九) -- 软删除
  3. [Android]proguard重新编译和如何不混淆第三方jar包
  4. LESS介绍及其与Sass的差异
  5. Qt webkit插件相关知识
  6. JNI c++ 调用 java
  7. [HZAU]华中农业大学第四届程序设计大赛网络同步赛
  8. ExpectationMaximum
  9. WCF SOA服务应用
  10. IIS 7 支持10万并发请求
  11. [UWP小白日记-15]在UWP手机端实时限制Textbox的输入
  12. AppBarLayout学习笔记
  13. 【php】windows安装PHP5.5+Apache2.4
  14. 版本控制——Version Control
  15. youtube下载工具
  16. 安卓中location.href或者location.reload 不起作用
  17. js实现上传前删除指定图片
  18. Typecho 二次开发文档链接
  19. GeneralizedLinearAlgorithm in Spark MLLib
  20. 微信jsapi退款操作

热门文章

  1. Android ConstraintLayout 小记
  2. Leetcode: Closest Leaf in a Binary Tree
  3. Mac下GoogleChromeHelper占用内存过高 的一个排查过程记录
  4. png8和png24的根本区别
  5. Docker Overview
  6. mac下php配置
  7. Centos 7搭建Gitlab服务器超详细
  8. springmvc 拦截器流程图
  9. day10——动态参数、函数注释、名称空间、函数的嵌套、global及nonlocal
  10. 国内P2P网贷行业再次大清理,仅剩646家