ioremap
2016-06-05 13:07
260 查看
将一个IO地址空间映射到内核的虚拟地址空间上
物理地址
CPU地址总线传来的地址,由硬件电路控制其具体含义。物理地址中很大一部分是留给内存条中内存的,但也常被映射到其他存储器上(如显存、bios等)
总线地址
外设使用的是地址总线,cpu使用的是物理地址。物理地址和总线地址之间的关系有系统设计决定的。在X86平台上,物理地址就是总线地址,这是因为它们共享相同的地址空间
虚拟地址
程序访问存储器所使用的逻辑地址称为虚拟地址
CPU启动保护模式后,程序运行在虚拟地址空间中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的
需要MMU的支持,把虚拟地址转换成物理地址
ioremap
phys_addr:要映射的起始的IO地址
size:要映射的空间的大小
flags:要映射的IO空间的和权限有关的标志
I/O读写
物理地址
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);
相关文章推荐
- Linux内核中ioremap映射的透彻理解
- 0702阶段总结
- PowerPC架构下Linux系统读写PCI设备
- Linux驱动学习13(初步认识ioremap)
- Linux ioremap 的实现
- Linux内核中ioremap映射的透彻理解
- linux内存操作--ioremap和mmap学习笔记
- (转)[经典]Linux内核中ioremap映射的透彻理解
- Linux内核中ioremap映射的透彻理解
- 9.Linux驱动开发前奏(2)-硬件访问技术
- ioremap/mmap的几个测试结论
- Linux学习:I/O 映射(ioremap)和writel/readl
- Linux 对处理器物理地址/虚拟地址和ioremap函数的个人理解
- Linux ioremap分析
- 一周总结(14周)
- 一对多 、多对多 的检索策略
- Torch ResNet Installation
- iOS开发实战——CollectionView点击事件与键盘隐藏结合案例
- AngularJs开发——控制器间的通信
- Android城市选着