RTC 配置
RTC 包含以下配置内容:
- 内核配置
在 luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,按如下选择:
Linux Device Drivers [*] Real Time Clock [*] Artinchip Soc RTC
- DTS 参数配置
RTC 驱动支持从 DTS 中配置的自定义参数,如下表:
表 1. RTC 自定义参数 参数名称 适用版本 类型 取值范围 功能说明 aic,alarm-io-output V0.1/V1.0 boolean 有 - 1,无 - 0 是否使能 Alarm 的 IO 输出功能 aic,32k-io-output V1.0 boolean 有 - 1,无 - 0 是否使能 32K 时钟输出功能 clock-rate V1.0 正整数 3276800±3196 时钟源的实测频率值*100,用于时钟校准 aic,clock-driver V1.0 正整数 [0, 15] clock 驱动能力,数值越小越省功耗 注:- 参数
aic,clock-driver
的值,需要通过一个 Sysfs 节点 驱动能力扫描 来扫描得到。 - 参数
aic,alarm-io-output
和aic,32k-io-output
共用一个 IO 输出,所以只能二选一。 clock-rate
取时钟源频率值的 100 倍,是为了提高校准的精度,校准可以精确到 0.03Hz。
- 参数
- D211
配置common/d211.dtsi 中的参数配置:
rtc: rtc@19030000 { compatible = "artinchip,aic-rtc-v1.0"; reg = <0x0 0x19030000 0x0 0x1000>; interrupts-extended = <&plic0 50 IRQ_TYPE_LEVEL_HIGH>; clocks = <&cmu CLK_RTC>; resets = <&rst RESET_RTC>; };
xxx/board.dts 中的参数配置:&rtc { aic,alarm-io-output; clock-rate = <3276851>; aic,clock-driver = <13>; status = "okay"; };
- 时区配置
luban SDK 中默认配置时区为
Asia/Shanghai
,即中国的 +8 时区。 在 luban 根目录下执行 make menuconfig,进入功能配置:Systemconfiguration(Asia/Shanghai)defaultlocaltime
有没有时区配置,可以通过 shell 命令
date
的输出信息判断,有 “UTC” 字样表示未配置时区,有 “CST” 字样表示已经配置了 +8 时区。# date Tue Jan 601:41:27 UTC 1970 - 未配置时区 # date Tue Jan 601:41:27 CST 1970 - 已配置 +8 时区
未配置时区的时候,RTC 时间 和 系统时间(date 命令的输出)是一致的;增加了时区配置后,两个会有一个时区差,关系:
系统时间=RTC 时间+时区
以 +8 时区为例,可以通过 hwclock 命令 看到这个差别:
# date - 系统时间 Tue Jan 601:49:53 CST 1970# hwclock - 原始的 RTC 时间 Mon Jan 517:49:17 19700.000000 seconds # hwclock -u - RTC 时间 + 时区,和系统时间一致 Tue Jan 601:49:20 19700.000000 seconds
注: 在打开时区的情况下,从 系统时间同步到 RTC 时间 的设置命令用hwclock -wu
,查看 RTC 时间的方式也应该加参数-u
(告诉 hwclock 工具 RTC 中保存的是 UTC 时间)。