关于ioremap
来源:互联网 发布:数据对企业的重要性 编辑:程序博客网 时间:2024/06/05 17:15
void * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
phys_addr:要映射的起始的IO地址;
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志;
void *ioremap(unsigned long phys_addr, unsigned long size)
phys_addr:是要映射的物理地址;
size:是要映射的长度;
功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问;
实现: 对要映射的IO地址空间进行判断,低PCI/ISA地址不需要重新映射,也不允许用户将IO地址空间映射到正在使用的RAM中,最后申请一个 vm_area_struct结构,调用remap_area_pages填写页表,若填写过程不成功则释放申请的vm_area_struct空间;
ioremap 依靠 __ioremap实现,它只是在__ioremap中以第三个参数为0调用来实现.
extern inline void * ioremap (unsigned long offset, unsigned long size)
{
return __ioremap(offset, size, 0);
}
ioremap是内核提供的用来映射外设寄存器到主存的函数,我们要映射的地址已经从pci_dev中读了出来,这样就水到渠成的成功映射了而不会和其他地址有冲突。映射完了有什么效果,举个例子,比如某个网卡有100 个寄存器,他们都是连在一块的,位置是固定的,加入每个寄存器占4个字节,那么一共400个字节的空间被映射到内存成功后,ioaddr就是这段地址的开 头(注意ioaddr是虚拟地址,而mmio_start是物理地址,它是BIOS得到的,肯定是物理地址,而保护模式下CPU不认物理地址,只认虚拟地 址),ioaddr+0就是第一个寄存器的地址,ioaddr+4就是第二个寄存器地址(每个寄存器占4个字节),以此类推,我们就能够在内存中访问到所 有的寄存器进而操控他们了。
函数 __ioremap 物理地址到内核映射空间的映射函数
phys_addr:要映射的起始的IO地址;
size:要映射的空间的大小;
flags:要映射的IO空间的和权限有关的标志;
void *ioremap(unsigned long phys_addr, unsigned long size)
phys_addr:是要映射的物理地址;
size:是要映射的长度;
功能: 将一个IO地址空间映射到内核的虚拟地址空间上去,便于访问;
实现: 对要映射的IO地址空间进行判断,低PCI/ISA地址不需要重新映射,也不允许用户将IO地址空间映射到正在使用的RAM中,最后申请一个 vm_area_struct结构,调用remap_area_pages填写页表,若填写过程不成功则释放申请的vm_area_struct空间;
ioremap 依靠 __ioremap实现,它只是在__ioremap中以第三个参数为0调用来实现.
extern inline void * ioremap (unsigned long offset, unsigned long size)
{
return __ioremap(offset, size, 0);
}
ioremap是内核提供的用来映射外设寄存器到主存的函数,我们要映射的地址已经从pci_dev中读了出来,这样就水到渠成的成功映射了而不会和其他地址有冲突。映射完了有什么效果,举个例子,比如某个网卡有100 个寄存器,他们都是连在一块的,位置是固定的,加入每个寄存器占4个字节,那么一共400个字节的空间被映射到内存成功后,ioaddr就是这段地址的开 头(注意ioaddr是虚拟地址,而mmio_start是物理地址,它是BIOS得到的,肯定是物理地址,而保护模式下CPU不认物理地址,只认虚拟地 址),ioaddr+0就是第一个寄存器的地址,ioaddr+4就是第二个寄存器地址(每个寄存器占4个字节),以此类推,我们就能够在内存中访问到所 有的寄存器进而操控他们了。
函数 __ioremap 物理地址到内核映射空间的映射函数
- 关于ioremap
- 关于ioremap
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap 和 phys_to_virt
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region
- 关于ioremap,request_mem_region(转)
- ioremap
- ioremap
- ioremap
- ioremap
- ioremap
- ioremap()
- 行转列和列转行
- uva 820 Internet Bandwidth (最大流,预流推进)
- CSS入门系列:第二部分 属性(三)
- UVA 102 Ecological bin packaging
- linux 默认的include在哪?
- 关于ioremap
- Oracle创建删除用户、角色、表空间、导入导出、...命令总结
- 批处理(BAT)中Date的应用技巧
- JavaScript继承详解(五)
- Web开发其它技巧和经验列表
- Python的一些特性
- delete label; return ret;
- 第四堂课后作业
- VC++ 中LInk2001 、C2001、C2005、C2011出错原因