RTC 功能:

RTC全称为Real Time Clock,是一个专门用来记录时间的硬件设备,一般可以集成在soc内部,或者选择外挂,通过i2c与其通信。
那为什么会需要RTC,因为Linux的系统时间(也就是我们常说的wall time)只能在系统运行时使用,系统关机时间就丢了,而RTC可以在系统关闭后,依靠外部电池或其他supply继续工作,这才将时间保存下来。
一般在Linux系统启动后,会先读取RTC时间,将其同步给wall time,这部分逻辑关注后面的hctosys部分,之后如果有了网络,应用程序可以再将网络时间同步给wall time跟RTC,做一次校准。
Linux 提供了三种用户空间调用接口。对应的路径为:
- SYSFS接口:/sys/class/rtc/rtc0/
- PROCFS接口: /proc/driver/rtc
- IOCTL接口: /dev/rtc0
查看RTC 时间: vir_dev:/ # hwclock --show 2024-11-04 20:02:13+0000 vir_dev:/ # 查看Linux 维护时间: 127|vir_dev:/ # date Mon Nov 4 20:02:32 GMT 2024 vir_dev:/ # 设置于当前系统不一样的系统时间 Orion_O6:/ # date -s "2025-08-25 17:19:10" Mon Aug 25 17:19:10 CST 2025 Orion_O6:/ # date Mon Aug 25 17:19:13 CST 2025 读取当前RTC时间: Orion_O6:/ # hwclock -r 2025-08-25 02:12:46+0000 将当前系统时间写入RTC: Orion_O6:/ # hwclock -w 读取当前RTC时间,可以看到更新: Orion_O6:/ # hwclock -r 2025-08-25 09:19:51+0000 Orion_O6:/ # 闹钟唤醒系统: setting 设置定时 -> power按键或者息屏进str -》 定时器到时可以正常唤醒屏幕 dumpsys alarm

设置RTC 开机,目前android Aosp 没有对应jni 接口来实现,后续需要二次开发,我们可以通过sys node 来验证改功能:
#30秒后定时开机
echo +30 > /sys/class/rtc/rtc0/wakealarm
# 查看开机时间 、
cat /sys/class/rtc/rtc0/wakealarm
#关机 reboot -p
RTC 唤醒测试:
当前系统时间,比如10-30 AM,设定闹钟alarm 时间为10-31 AM,然后强制进休眠 echo mem > /sys/power/state 可以看到10-31 系统会唤醒回来,正常闹钟响应。
3626

被折叠的 条评论
为什么被折叠?



