调试指南
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 节点
- 状态信息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` 。
注:驱动力扫描的整个过程大约需要 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 时间同步设置到系统时间