一、RTC的作用
对于手机、PDA的嵌入式平台的关机闹钟都使用RTC实现,RTC是一个硬件。
RTC中存储两个时间,一个是普通的滴答时间,另一个是提醒时间,RTC犹如一个滴答计时器,当RTC中时钟到达指定的提醒时间的时候,就会发出中断,让系统开机,从而达到关机闹钟的功能。
在Linux中,当系统启动之后,会启动一个叫atd的deamon进程,用于操作rtc。
atd中会用while循环不停的查询/var/spool/at/xxx.pid和/var/spool/at/trigger两个管道是否有数据,如果有则重新设置RTC的滴答时间或是提醒时间(/var/spool/at/xxx.pid是以提醒的时间的UTC的秒数来命名的;而/var/spool/at/trigger中有数据"w"表示需要将系统当前时间写到RTC中)。当设置一个提醒时间到RTC之后,会使用select监听/var/spool/at/xxx.pid和/var/spool/at/trigger两个管道及rtc提醒时间的中断消息。
二、RTC的接口
RTC硬件对应的设备文件是/dev/rtc。
下面省略了open和close接口
对
RTC设备的读操作主要是返回目前
RTC的中断情况的一个状态值(代码中用
rtc_irq_status标识),这个值是一个
unsigned long类型的数据,该数据的定义如下:
其他
bit
低
8bit
中断次数
中断类型
下面的宏定义了中断的类型:
#define
RTC_IRQF
0x80
#define
RTC_PF
0x40
#define
RTC_AF
0x20
#define
RTC_UF
0x10
RTC_PF标识periodic interrupt flag。
RTC_AF标识alarm interrupt flag
RTC_UF标识update interrupt flag
没有中断产生的时候,
RTC没有数据可读。
RTC misc driver实现的ioctl命令包括:
命令
解释
RTC_AIE_OFF
关闭
alarm中断
RTC_AIE_ON
打开
alarm中断
RTC_PIE_ON
打开周期性中断
RTC_PIE_OFF
关闭周期性中断
RTC_UIE_ON
打开
update类型的中断
RTC_UIE_OFF
关闭
update类型的中断
RTC_ALM_READ
读取
alarm的时间
RTC_ALM_SET
设定
alarm的时间
RTC_RD_TIME
读取当前的
RTC时间
RTC_SET_TIME
设定当前的
RTC时间
RTC_IRQP_READ
读取当前周期性中断的频率
RTC_IRQP_SET
设定当前周期性中断的频率
2.3、/dev/rtc设备操作的要求
1)同时只能有一个进程打开/dev/rtc设备进行操作;
2)对RTC写Alarm之后,不能关闭设备号,否则设置的Alarm无效,必须在Alarm中断到达之后关闭才有效
说明:上面是分析Qtopia得出的结论,如果有分析不清楚或是表达不得当的地方,请多多指教!