4.4.2. 参数配置¶
4.4.2.1. 内核配置¶
在luban根目录下执行 make kernel-menuconfig,进入kernel的功能配置,按如下选择:
Linux
    Device Drivers
        [*] Real Time Clock
            [*] Artinchip Soc RTC
4.4.2.2. DTS 参数配置¶
4.4.2.2.1. RTC 自定义参数¶
RTC驱动支持从DTS中配置的自定义参数,如下表:
| 参数名称 | 适用版本 | 类型 | 取值范围 | 功能说明 | 
|---|---|---|---|---|
| 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。
4.4.2.2.2. 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";
};
4.4.2.3. 时区配置¶
luban SDK中默认配置时区为 Asia/Shanghai,即中国的 +8 时区。 在luban根目录下执行 make menuconfig,进入功能配置:
System configuration
    (Asia/Shanghai) default local time
有没有时区配置,可以通过shell命令 date 的输出信息判断,有 “UTC” 字样表示未配置时区,有 “CST” 字样表示已经配置了 +8 时区。
# date
Tue Jan  6 01:41:27 UTC 1970 - 未配置时区
# date
Tue Jan  6 01:41:27 CST 1970 - 已配置 +8 时区
未配置时区的时候,RTC 时间 和 系统时间(date命令的输出)是一致的;增加了时区配置后,两个会有一个时区差,关系:
系统时间 = RTC 时间 + 时区
以 +8 时区为例,可以通过 hwclock 命令 看到这个差别:
# date  - 系统时间
Tue Jan  6 01:49:53 CST 1970
# hwclock  - 原始的RTC时间
Mon Jan  5 17:49:17 1970  0.000000 seconds
# hwclock  -u    - RTC时间 + 时区,和系统时间一致
Tue Jan  6 01:49:20 1970  0.000000 seconds
注解
在打开时区的情况下,从 系统时间同步到RTC时间 的设置命令用 hwclock -wu,查看RTC时间的方式也应该加参数 -u (告诉hwclock工具RTC中保存的是UTC时间)。