一. rtc 作用
rtc是一个片外的时钟源,相比片内时钟源它更精确,而且稳定性高,不会随频率变化而变化。
RTC中存储两个时间,一个是普通的滴答时间,另一个是提醒时间,RTC犹如一个滴答计时器,当RTC中时钟到达指定的提醒时间的时候,就会发出中断,让系统开机,从而达到关机闹钟的功能。
二. 用户空间接口
/dev/rtc... 兼容PC系统的RTC,对非x86结构支持不完整。
/dev/rtc0,/dev/rtc1 ... 系统框架的一部分,支持多种RTC
系统下还有如下两个位置提供rtc相关接口:
两者描述的属性不尽相同,/sys接口下主要rtc本身业务功能描述; 而proc接口主要是描述了rtc支持的功能,其描述属性和ioctl操作接近。
2.1 sys接口
/sys/class/rtc/rtcN... sysfs支持只读访问RTC
cat /sys/class/rtc/rtc0/
date hctosys power/ time
dev max_user_freq since_epoch uevent
device/ name subsystem/ wakealarm
--------------------------------------------------------------------------
cat /sys/class/rtc/rtc0/*
2021-05-11
253:0
cat: /sys/class/rtc/rtc0/device: 是一个目录
1
64
ls2x-rtc 100d0100.rtc
cat: /sys/class/rtc/rtc0/power: 是一个目录
1620698709
cat: /sys/class/rtc/rtc0/subsystem: 是一个目录
02:05:09
MAJOR=253
MINOR=0
DEVNAME=rtc0
2.2 proc接口
/proc/driver/rtc... 首个RTC(rtc0)使用procfs接口访问
cat /proc/driver/rtc
rtc_time : 01:41:56
rtc_date : 2021-05-11
alrm_time : 12:59:04
alrm_date : 2021-05-10
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 64
max user IRQ frequency : 64
24hr : yes
2.3 ioctl
rtc ioctl 支持如下命令:
命令 | 解释 |
RTC_AIE_OFF |
关闭alarm中断 |
RTC_AIE_ON | 打开alarm中断,RTC连接上一个中断线,它可以在未来24小时发送一个报警中断 |
RTC_PIE_ON | 打开周期性中断 |
RTC_PIE_OFF | 关闭周期性中断 |
RTC_UIE_ON | 打开update类型的中断 |
RTC_UIE_OFF | 关闭update类型的中断 |
RTC_ALM_READ | 读取alarm的时间,在24小时内发送一个警告 |
RTC_ALM_SET | 设定alarm的时间,在24小时内发送一个警告 |
RTC_RD_TIME | 读取当前的RTC时间 |
RTC_SET_TIME | 设定当前的RTC时间 |
RTC_IRQP_READ | 读取当前周期性中断的频率 |
RTC_IRQP_SET | 设定当前周期性中断的频率 |
三. 驱动
四. 测试
Linux时间有两个, 系统时间(Wall Time), RTC时间。
系统时间(WT):由Linux系统软件维持的时间
date
2021年 05月 11日 星期二 11:02:45 CST
RTC时间:这个时间来自我们设备上的RTC芯片,通过 hwclock 可以读取
hwclock -r
2021-05-11 11:03:28.717382+08:00
4.1 获取系统rtc状态
dmesg | grep rtc
[ 29.489140] rtc rtc0: invalid alarm value: 1957-4-20 4:30:35
[ 29.494815] ls2x-rtc LOON0001:00: rtc core: registered LOON0001:00 as rtc0
[ 29.503640] rtc-efi rtc-efi: rtc core: registered rtc-efi as rtc1
[ 29.651267] ls2x-rtc LOON0001:00: setting system clock to 2021-05-10 01:14:30 UTC (1620609270)
4.2 时间标识
RTC硬件时钟是主板time,系统时间是linux操作系统的time。
1、CST China Standard Time UT+8:00
2、GMT 格林威治标准时间(Greenwich Mean Time,简称G.M.T.)
3、UTC 世界协调时间UTC比GMT来得更加精准
4、DST 夏日节约时间:所谓「夏日节约时间」Daylight Saving Time(简称D.S.T.),
5、RTC 硬件时钟(Real Time Clock,简称RTC):hwclock -r,相对应的系统时钟(System Clock):date -R。
6、GMT + 8 = UTC + 8 = CST
7、查看硬件时钟的操作:# hwclock --show 或# clock –show
8、强制把系统时间写入CMOS#clock -w
9、同步系统时钟并写入cmos: ntpdate 时间服务器;hwclock -w