Edit online

调试指南

18 Dec 2024
Read time: 4 minute(s)

本节介绍 RTC 调试流程。

打开调试开关

  1. 在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
    make kernel-menuconfig

    或使用简写命令

    make km
  2. 在内核配置界面,按如下选择,打开调试开关:
    Linux
        Kernel hacking
            ArtInChip Debug
                [*] RTC driver debug
    打开 DEBUG 选项后:
    • 驱动以-O0 编译。

    • pr_dbg()dev_dbg() 调试信息会被编译。

      在系统运行时,如果要打印 pr_dbg()dev_dbg() 信息,还需要调整 loglevel 为 8,可以通过以下两种方式实现:
      • board.dts 中修改 bootargs,增加 “loglevel=8”

      • 在板子启动到 Linux Shell 后,执行下列命令:
        echo8 > /proc/sys/kernel/printk

Sysfs 节点

Linux 内核原生提供一些 RTC 的 Sysfs 节点,可以用来获取(只读)时间、范围等信息。
  1. 状态信息
    1. /sys/class/rtc/ 目录中查找系统中的 RTC 设备:
      ls /sys/class/rtc/rtc0/
      输出示例如下:
      date           hctosys        range          time
      dev            max_user_freq  since_epoch    uevent
      device         name           subsystem
    2. 选择一个 RTC 设备并进入其目录:
      • 示例 1:查看 time 信息
        cat /sys/class/rtc/rtc0/time
        输出示例如下:
        00:00:00
      • 示例 2:查看 date 信息:
        cat /sys/class/rtc/rtc0/date
        输出示例如下:
        1970-01-01
    3. 在 RTC 驱动初始化成功后,会在 Sysfs 中注册生成一个 status 节点,其中打印了当前的 RTC 配置及状态信息。例如查看 /sys/devices/platform/soc/19030000.rtc 目录中的状态信息:
      1. 进入 /sys/devices/platform/soc/19030000.rtc/ 目录:
        cd /sys/devices/platform/soc/19030000.rtc/
      2. 执行 cat status 命令查看状态信息,示例如下:
        In RTC V1.00:
        Module Enable: 1
        Alarm Enable: 0, Output alarm IO: 2/1, Output 32K: 0
        Clock rate: 32787, Driver: 13
        Calibration Slow, Value: -608
  2. 驱动能力扫描

    为了节省功耗,可以调低 RTC V1.0 的 32K 时钟驱动能力,驱动力可调范围为 [0, 15],值越大功耗越大。

    RTC 驱动提供了一个 Sysfs 节点 driver_capability,方便用户扫描出最适合的驱动力值。在 RTC 驱动初始化成功后:
    1. 进入设备 Sysfs 目录,例如 /sys/devices/platform/soc/19030000.rtc/
      cd /sys/devices/platform/soc/19030000.rtc/
    2. 执行下列命令,读取驱动力节点信息:
      注:

      驱动力扫描的整个过程大约需要 16 秒。

      cat driver_capability
      输出示例如下:
      [95.755513] 32K-clk driver 0 is OK
      [97.835482] 32K-clk driver 1 is OK
      [99.915447] 32K-clk driver 2 is OK
      [101.995471] 32K-clk driver 3 is OK
      [104.075494] 32K-clk driver 4 is OK
      [106.155478] 32K-clk driver 5 is OK
      [108.235529] 32K-clk driver 6 is OK
      [110.315497] 32K-clk driver 7 is OK
      [112.395507] 32K-clk driver 8 is OK
      [114.475539] 32K-clk driver 9 is OK
      [116.555492] 32K-clk driver 10 is OK
      [118.635732] 32K-clk driver 11 is OK
      [120.715503] 32K-clk driver 12 is OK
      [122.795466] 32K-clk driver 13 is OK
      [124.875483] 32K-clk driver 14 is OK
      [126.955511] 32K-clk driver 15 is OK
      The status of RTC driver:
      Driver  0123456789101112131415
      Status OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK
    3. 从扫描结果中,选取一个标注 “OK” 的值,并将其配置到 :ref:`ref_to_rtc_dts`

hwclock 命令

Busybox 源码自带一个 hwclock 工具,用来读取和设置 RTC 时间。用法如下:
  • 读取当前 RTC 时间(不加任何参数时就默认是读取):
    hwclock -r
    输出示例如下:
    Thu Jan  100:00:00 19700.000000 seconds
  • 读取当前 RTC 时间,并加上时区校准:
    hwclock -ru
  • 将当前的系统时间同步设置到 RTC:
    hwclock -w
  • 将当前的系统时间减去时区值,并同步设置到 RTC:
    hwclock -wu
  • 将 RTC 时间同步到系统时间:
    hwclock -s