Edit online

RTC 配置

RTC 包含以下配置内容:
  1. 内核配置

    在 luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,按如下选择:

    Linux
        Device Drivers
            [*] Real Time Clock
                [*] Artinchip Soc RTC
  2. 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 驱动能力,数值越小越省功耗
    注:
    1. 参数 aic,clock-driver 的值,需要通过一个 Sysfs 节点 驱动能力扫描 来扫描得到。
    2. 参数 aic,alarm-io-outputaic,32k-io-output 共用一个 IO 输出,所以只能二选一。
    3. clock-rate 取时钟源频率值的 100 倍,是为了提高校准的精度,校准可以精确到 0.03Hz。
  3. 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. 时区配置

    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 时间)。