4.4.3. 调试指南
4.4.3.1. 调试开关
参考快速入门 - 编译概述 - Kernel配置,进入kernel的功能配置,可以打开RTC模块的DEBUG选项:
Linux
Kernel hacking
ZX Debug
[*] RTC driver debug
此DEBUG选项打开的影响:
RTC驱动以-O0编译
RTC的pr_dbg()和dev_dbg()调试信息会被编译
在系统运行时,如果要打印pr_dbg()和dev_dbg()信息,还需要调整loglevel为8,两个方法:
在board.dts中修改bootargs,增加“loglevel=8”
在板子启动到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时间同步设置到系统时间