Note

载入中...

分类

载入中...

最新文章

载入中...

回复

载入中...

站点统计

载入中...
Linux的RTC驱动提高2006-9-1 17:39:00

 Linux的RTC驱动提高

  by good02xaut

5.           嵌入式领域的RTC驱动

以上我们描述了在i386架构,linux内核针对RTC的行为。下面介绍一下在嵌入式领域,以arm处理器s3c44b0x为例,其RTC驱动开发的要点。

   S3c44b0x内部的rtc不仅仅可以提供实时时钟的功能,还能提供定时报警等其他辅助功能。因此可以在driver/char/s3c44b0x_rtc.c中单独编写rtc驱动代码,并提供辅助功能的应用程序接口,比如ioctl()函数调用。单独的rtc驱动,多采用字符设备或misc框架,比较容易实现,因此不是重点。下面就如何让rtc与内核变量xtime联系起来分析一下。

   linux/arch/arm/kernel/time.c文件:

void __init time_init(void)

{

1.  通过s3c44b0x_rtc.c 文件提供的接口,读取RTCYYMMDDHHMMSS

2.  调用mktime(year, mon, day, hour, min, sec),得到需要的秒值。

    xtime.tv_usec = mktime(year, mon, day, hour, min, sec);

    xtime.tv_sec  = 0;

 

    setup_timer();

}

  根据xtime的值周期更新RTC的功能,必须在内核硬件定时器的中断函数里实现,在linux/arch/arm/mach-s3c44b0x/time.c中:

void samsung_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)

{

        do_timer(regs);

        使用s3c44b0x_rtc.c 文件提供的接口,周期更新RTC的值。这里肯定需要提供一些辅助变量完成时间的定时,比如定时5分钟更新一次RTC

}

发表评论:
载入中...