4.4.3. 调试指南

4.4.3.1. 调试开关

参考快速入门 - 编译概述 - Kernel配置,进入kernel的功能配置,可以打开RTC模块的DEBUG选项:

Linux
    Kernel hacking
        ZX Debug
            [*] RTC driver debug

此DEBUG选项打开的影响:

  1. RTC驱动以-O0编译

  2. RTC的pr_dbg()和dev_dbg()调试信息会被编译

在系统运行时,如果要打印pr_dbg()和dev_dbg()信息,还需要调整loglevel为8,两个方法:

  1. 在board.dts中修改bootargs,增加“loglevel=8”

  2. 在板子启动到Linux shell后,执行命令:

echo 8 > /proc/sys/kernel/printk

4.4.3.2. Sysfs 节点

4.4.3.2.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

4.4.3.2.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  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
Status OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK OK

客户可以从扫描结果中标注 “OK” 的值中选取一个配置到 :ref:`ref_to_rtc_dts`

小技巧

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

4.4.3.3. hwclock 命令

busybox会带一个hwclock工具,可以用来读取、设置RTC时间。用法如下:

# hwclock -r  —— 读取当前RTC时间(不加任何参数时就默认是读取)
Thu Jan  1 00:00:00 1970  0.000000 seconds
# hwclock -ru  —— 读取当前RTC时间,然后加上时区校准
# hwclock -w  —— 将当前的系统时间同步设置到RTC
# hwclock -wu  —— 将当前的系统时间减去时区值,然后同步设置到RTC
# hwclock -s  —— 将RTC时间同步设置到系统时间