Linux ioremap 的实现
linux, memory, ioremap
在 linux kernel 的代码中,经常看到 ioremap 函数。
其功能是将给定的物理地址映射为虚拟地址。
注意,此处的物理地址并不是真正内存的物理地址,而是cpu上的io memory。
可以参考芯片《Reference Manual》中断 memory map 章节。
本文主要学习 iorem...
分类:
系统相关 时间:
2014-11-03 19:24:20
阅读次数:
343
#define GPIO_OFT(x) ((x) - 0x56000000)#define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050)))static int s3c24xx_leds_open(struct....
分类:
其他好文 时间:
2014-10-08 15:08:25
阅读次数:
224
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空...
分类:
其他好文 时间:
2014-10-06 18:13:40
阅读次数:
179
request_mem_region仅仅是linux对IO内存的管理,意思指这块内存我已经占用了,别人就不要动了,也不能被swap出去。使用这些寄存器时,可以不调用request_mem_region,但这样的话就不能阻止别人对他的访问了。http://blog.csdn.net/skyflying...
分类:
其他好文 时间:
2014-10-01 10:16:01
阅读次数:
195
#include
#include
#include
#include
#include
#include
#define GPNCON 0x7F008830//ioremap使用的地址,与具体硬件相关
irqreturn_t key_int(int irq, void *dev_id)
{
printk("key down!\n");
return 0;
}
void k...
分类:
其他好文 时间:
2014-09-13 12:07:05
阅读次数:
386
之前的32位系统中,无论是对内存还是寄存器,映射统一使用的是ioremap_nocache这个接口,但是在64位系统中,就要做区分了,因为使用iomap_nocache做映射的地址在64位系统中使用memcpy时会发生对齐错误导致kernel panic,因此,如果在64位系统中,我们要对一个映射后的虚拟地址做memcpy操作,就要使用iomap_wc来做映射。这两个映射接口的定义在arch/ar...
分类:
其他好文 时间:
2014-08-24 20:54:43
阅读次数:
643
早先看linux驱动相关书籍的时候,隐约记得物理地址有动态映射和静态映射,当时写驱动都是想着自己动手写,所以一上手看着动态映射好用,就在自己的驱动上使用动态映射,将寄存器地址映射到内存上,即调用ioremap函数。在单线作战的时候ioremap确实好用,不需要改动内核的其他部分,直接将自己想用的物理地址映射到内存再操作。但很多时候当我们的设备需要在全局范围内被使用的时候,ioremap就会比较尴尬...
分类:
系统相关 时间:
2014-07-11 08:19:04
阅读次数:
316
最近在做视频输出相关的东西,对于预留给framebuffer的内存使用不是很清楚,现在找到一些资料整理一下,以备使用。
对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成。那么CPU在这个过程中是如何找到外设的呢?
尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口。但是如果系统能够每个端口都被赋予一个具体的地址值,那么在系统中就能轻易的找到任何一个外设。系...
分类:
系统相关 时间:
2014-05-13 11:27:38
阅读次数:
393