TinkerBoardR开发板上有一个集成在RK809上的RTC(Real Time Clock),主要功能有时钟,日历,闹钟,周期性中断。双通道32KHz时钟输出。
RTC的供电口如下图所示,接上电池后可以保证掉电后RTC仍然可以正常运行。位置如下图所示:
//kernel/arch/arm64/boot/dts/rockchip/rk3399pro-tinker_edge_r.dtsi
&i2c0 {
status = "okay";
i2c-scl-rising-time-ns = <180>;
i2c-scl-falling-time-ns = <30>;
clock-frequency = <400000>;
rk809: pmic@20 {
....
rtc {
status = "okay"; //这里选择okay就可以使用了
};
....
};
....
};
驱动源码路径:drivers/rtc/rtc-rk808.c
负责在sysfs中实例化RTC属性的相关内核代码在内核源码树的drivers/rtc/rtc_sysfs.c中定义,一旦注册,RTC设备就将在/sys/class/rtc下创建rtc目录,该目录下包含一组只读属性,其中重要的属性如下。
$ cat/sys/class/rtc/rtc0/date
2022-10-18
$ cat/sys/class/rtc/rtc0/time
20:54:20
$ cat/sys/class/rtc/rtc0/hctosys
1
$ cat/sys/class/rtc/rtc0/since epoch
1503931738
硬件时钟(hwclodk)工具用于访问RTC设备。
下面举出一些命令例子
通过系统时钟来设置RTC
$ sudo ntpd -q #确保系统时钟是从网络时间设置的
$ sudo hwclock --systohc #从系统时钟设置RTC
$ sudo hwclock --show #设置RTC
Sat Oct 22 17:36:50 2022 -0.671045 seconds
手动设置系统时间:
$ sudo date -s '2022-10-28 17:37:00'+s' #手动设置系统时钟
$ sudo hwclock --systohc #在系统时间上同步RTC芯片
如果没有给出参数,hwclock假定RTC设备文件是/dev/rtc,它实际上是真正RTC设备的符号链接:
ls -1 /dev/rtc
lrwxrwxrwx 1 root root 4 aout 27 17:50 /dev/rtc -> rtc0