调试指南
18 Dec 2024
Read time: 4 minute(s)
本节介绍 RTC 调试流程。
打开调试开关
-
在 SDK 根目录下,执行下列命令,进入 kernel 的功能配置界面:
make kernel-menuconfig
或使用简写命令
make km
-
在内核配置界面,按如下选择,打开调试开关:
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 节点,可以用来获取(只读)时间、范围等信息。
- 状态信息
- 在 /sys/class/rtc/ 目录中查找系统中的 RTC
设备:
ls /sys/class/rtc/rtc0/
输出示例如下:date hctosys range time dev max_user_freq since_epoch uevent device name subsystem
-
选择一个 RTC 设备并进入其目录:
- 示例 1:查看
time
信息cat /sys/class/rtc/rtc0/time
输出示例如下:00:00:00
- 示例 2:查看
date
信息:cat /sys/class/rtc/rtc0/date
输出示例如下:1970-01-01
- 示例 1:查看
-
在 RTC 驱动初始化成功后,会在 Sysfs 中注册生成一个
status
节点,其中打印了当前的 RTC 配置及状态信息。例如查看 /sys/devices/platform/soc/19030000.rtc 目录中的状态信息:-
进入 /sys/devices/platform/soc/19030000.rtc/ 目录:
cd /sys/devices/platform/soc/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
-
- 在 /sys/class/rtc/ 目录中查找系统中的 RTC
设备:
- 驱动能力扫描
为了节省功耗,可以调低 RTC V1.0 的 32K 时钟驱动能力,驱动力可调范围为 [0, 15],值越大功耗越大。
RTC 驱动提供了一个 Sysfs 节点driver_capability
,方便用户扫描出最适合的驱动力值。在 RTC 驱动初始化成功后:- 进入设备 Sysfs 目录,例如
/sys/devices/platform/soc/19030000.rtc/:
cd /sys/devices/platform/soc/19030000.rtc/
-
执行下列命令,读取驱动力节点信息:注:
驱动力扫描的整个过程大约需要 16 秒。
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` 。
- 进入设备 Sysfs 目录,例如
/sys/devices/platform/soc/19030000.rtc/:
hwclock 命令
Busybox 源码自带一个
hwclock
工具,用来读取和设置 RTC 时间。用法如下:-
读取当前 RTC 时间(不加任何参数时就默认是读取):
hwclock -r
输出示例如下:Thu Jan 100:00:00 19700.000000 seconds
-
读取当前 RTC 时间,并加上时区校准:
hwclock -ru
-
将当前的系统时间同步设置到 RTC:
hwclock -w
-
将当前的系统时间减去时区值,并同步设置到 RTC:
hwclock -wu
-
将 RTC 时间同步到系统时间:
hwclock -s