Edit online

调试指南

4 Dec 2024
Read time: 3 minute(s)

本节介绍 RTC 调试流程。

打开调试开关

在 Luban 根目录下执行 make kernel-menuconfig,进入 Kernel 的功能配置,可以打开模块的 DEBUG 选项:

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 节点

  1. 状态信息
    Linux 内核原生提供一些 RTC 的 Sysfs 节点,可以用来获取(只读)时间、范围等信息。
     # ls /sys/class/rtc/rtc0/
    date           hctosys        range          time
    dev            max_user_freq  since_epoch    uevent
    device         name           subsystem
    # cat /sys/class/rtc/rtc0/time
    00:00:00
    # cat /sys/class/rtc/rtc0/date
    1970-01-01
    在 RTC 驱动初始化成功后,会在 Sysfs 中注册生成一个 status 节点,其中打印了当前的 RTC 配置及状态信息:
    [aic@]# cd /sys/devices/platform/soc/19030000.rtc/[aic@19030000.rtc]# 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 驱动初始化成功后,可以在其 Sysfs 目录,找到此节点,执行 cat 命令可触发扫描:

    [aic@]# cd /sys/devices/platform/soc/19030000.rtc/[aic@19030000.rtc]# 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
    
            用户可以从扫描结果中标注 “OK” 的值中选取一个配置到 :ref:`ref_to_rtc_dts` 。
    
    注:

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

hwclock 命令

Busybox 会带一个 hwclock 工具,可以用来读取、设置 RTC 时间。用法如下:
# hwclock -r  —— 读取当前 RTC 时间(不加任何参数时就默认是读取)
Thu Jan  100:00:00 19700.000000 seconds
# hwclock -ru  —— 读取当前 RTC 时间,然后加上时区校准
# hwclock -w  —— 将当前的系统时间同步设置到 RTC
# hwclock -wu  —— 将当前的系统时间减去时区值,然后同步设置到 RTC
# hwclock -s  —— 将 RTC 时间同步设置到系统时间