当前位置:  技术问答>linux和unix

request_mem_region的用意

    来源: 互联网  发布时间:2017-05-11

    本文导语:  在s3c2410_wdt.c中 有一行 request_mem_region(res->start, size, pdev->name) 而 在devs.c中 static struct resource s3c_wdt_resource[] = { [0] = { .start = S3C24XX_PA_WATCHDOG, .end   = S3C24XX_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1, .flags = IORESOURCE_M...

在s3c2410_wdt.c中
有一行
request_mem_region(res->start, size, pdev->name)

在devs.c中
static struct resource s3c_wdt_resource[] = {
[0] = {
.start = S3C24XX_PA_WATCHDOG,
.end   = S3C24XX_PA_WATCHDOG + S3C24XX_SZ_WATCHDOG - 1,
.flags = IORESOURCE_MEM,
},
[1] = {
.start = IRQ_WDT,
.end   = IRQ_WDT,
.flags = IORESOURCE_IRQ,
}

}
在arch/arm/mach-s3c2410/include/mach/map.h
#define S3C24XX_PA_WATCHDOG S3C2410_PA_WATCHDOG
在/arch/arm/plat-s3c24xx/include/mach/map.h
#define S3C2410_PA_WATCHDOG (0x53000000)

即上面行代码要申请0x53000000开始的一段size大小的内存地址空间以访问watchdog

从s3c2440/s3c2410手册上获知
watchdog的寄存器地址本来就是从0x53000000开始的一段内存区域
比如WTCON  0x53000000,WTDAwatchdog  0x53000004,WTCNT  0x53000008等,就是说这些io内存的物理地址都是已经被cpu定义好的了,即使不去request_mem_region,watchdog那些寄存器的物理地址也是从这里开始的,即在驱动程序中访问watchdog就必须去访问这部分物理地址(的ioremap之后的虚拟地址)。
难道内核会把0x53000000这个地址空间分配给别的寄存器吗?
不知道request_mem_region用意为何?

s3c2440的地址空间中,从4千8百万到5b00001c这段地址都是已经分配好的了,用于特殊寄存器的寻址,
访问某个地址就是访问一个已定的寄存器。

不知道我的理解哪有问题

|
寄存器的地址是不变的,寄存器不属于标准内存,而是属于I/O内存。只是这些寄存器的地址要拿到linux内核中使用的话,要经过一系列的处理,这是Linux使用I/O内存方式。
至于怎样处理的,跟计算机平台,使用的总线以及页表有关,很复杂的。
看下LDD3下面的I/O操作内容吧。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,