您的位置:首页 > 运维架构 > Linux

linux内核 平台资源相关

2010-07-19 20:53 197 查看
linux-2.6.24/arch/arm/mach-*/platform-devices.c
static struct resource s3c_rtc_resource[] = {
[0] = {
.start = S3C2410_PA_RTC, //IO设备的物理地址
.end   = S3C2410_PA_RTC + 0xff,
.flags = IORESOURCE_MEM,
},

[1] = {
.start = IRQ_RTC,
.end   = IRQ_RTC,
.flags = IORESOURCE_IRQ,
},
[2] = {
.start = IRQ_TICK,
.end   = IRQ_TICK,
.flags = IORESOURCE_IRQ
}
};

linux-2.6.24/drivers/base/platform.c
struct resource *platform_get_resource(struct platform_device *dev, unsigned int type,unsigned int num)
{
int i;
for (i = 0; i < dev->num_resources; i++)  //num_resource 的个数
{
struct resource *r = &dev->resource; //resource应该s3c2410_rtc_resource是通过下标来对resource赋值

if ((r->flags & (IORESOURCE_IO|IORESOURCE_MEM|IORESOURCE_IRQ|IORESOURCE_DMA))== type)
if (num-- == 0)
return r;
}
return NULL;
}


而接下来,在驱动初始化的时候,经常会使用下面的调用来得到相关的资源,IRQ,MEN等等:
s3c2410_rtc_tickno = platform_get_irq(pdev, 1);传入的NUM是1, 也就是[ 2 ]
s3c2410_rtc_alarmno = platform_get_irq(pdev, 0);传入的NUM是0, 也就是[ 1 ]
这两句最终的结果是:
s3c2410_rtc_tickno =IRQ_TICK
s3c2410_rtc_alarmno= IRQ_RTC


int platform_get_irq(struct platform_device *dev, unsigned int num)
{
struct resource *r = platform_get_resource(dev, IORESOURCE_IRQ, num);
return r ? r->start : 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: