调试指南
RTC 调试包含以下步骤:
- 调试开关在 luban 根目录下执行 make kernel-menuconfig,进入 kernel 的功能配置,可以打开 RTC 模块的 DEBUG 选项:
Linux Kernel hacking Artinchip Debug [*] RTC driver debug
此 DEBUG 选项打开的影响:
-
RTC 驱动以-O0 编译
-
RTC 的 pr_dbg()和 dev_dbg()调试信息会被编译
在系统运行时,如果要打印 pr_dbg()和 dev_dbg()信息,还需要调整 loglevel 为 8,两个方法:
-
在 dts 中修改 bootargs,增加“loglevel=8”
-
在板子启动到 shell 后,执行命令:
echo8 > /proc/sys/kernel/printk
-
- Sysfs 节点状态信息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
- 驱动能力扫描
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` 。
注:驱动力扫描的整个过程大约需要 16s。
- 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 时间同步设置到系统时间