2410下片上设备如何添加并使用

 

<< 2410的初始化过程>>一文中我们看到了2410下的片上设备如何被添加到系统并和驱动配合使用的, 本文以RTC设备为例详细描述这个过程.

首先在arch/arm/s3c-2410/devs.c下添加静态描述的RTC设备资源及代表RCT设备的platform_device对象.

/* RTC */

static struct resource s3c_rtc_resource[] = {   /*RTC资源*/

    [0] = {

        .start = S3C24XX_PA_RTC,         /*RTC寄存器的物理起始地址*/

        .end   = S3C24XX_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 /*资源类型*/

    }

};

 

struct platform_device s3c_device_rtc = {   /*RTC设备*/

    .name         = "s3c2410-rtc",  /*设备名必须与驱动中的名字一致*/

    .id       = -1,

    .num_resources    = ARRAY_SIZE(s3c_rtc_resource),  

    .resource     = s3c_rtc_resource,  /*资源*/

};

EXPORT_SYMBOL(s3c_device_rtc);

   其中资源中的寄存器地址是物理地址, 在驱动中得到后会用ioremap()来重映射.

接着要把这个RTC设备添加到系统中去, << 2410的初始化过程>>说过初始化时会把smdk_devs[]下的设备都添加到系统中去, 因此我们只要把RTC设备添加到这个数组中去就行了:

Static struct platform_device __initdata *smdk_devs[] = {

   &s3c_device_nand,

   ….

   & s3c_device_rtc  /*加进去就行了*/

}

这样在系统初始化时就会把RTC设备加到系统中去,  之后RTC驱动注册好后, 系统就会为它寻找匹配的设备(匹配的根据就是上文讲的设备名字). 驱动找到设备后也就找到了设备的所有资源(寄存器地址, 中断号), 也就可以通过这些资源来控制设备了. 具体RTC驱动可参考<< 2410rtc驱动分析>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值