
一.标准流程1.板子上电,Linux 内核启动内核读取RTC 硬件时钟→ 把 RTC 时间加载为系统软件时钟。系统刚启动这一刻:系统时间 = RTC 读出的时间。如果 RTC 没电,这里读到的就是 1970-01-01。2.网络就绪后,NTP/chrony/timesyncd 启动通过网络访问 NTP 服务器,算出真实标准时间,和当前系统时间做对比。差距很小:slew 缓慢微调,慢慢修正系统时钟,不跳变。差距很大(RTC 没电、很久没同步):step 直接跳跃系统时间。3.NTP 同步成功之后, 用hwclock -w把修正后的系统时间写入 RTC 硬件目的:下次断电重启,RTC 里保存的就是最新正确时间循环:每次开机从 RTC 打底,联网后用网络时间校准,校准完回写 RTC。4.内核不会自动拿系统时间回写 RTC!只做:RTC → 系统(开机读)。系统 → RTC(写回)是 chrony/timesyncd 这类服务帮你做的,不是内核原生自动动作。chrony 默认:NTP 同步成功自动写 RTCsystemd-timesyncd 默认不会自动写 RTC,需要额外配置或者脚本执行hwclock -w5.RTC 只负责断电保存时间,RTC 晶振本身会漂移RTC 精度一般 ppm 级别,放几天就会慢 / 快几秒。RTC 不是 “绝对准确时间源”,网络 NTP 才是参考基准。RTC 角色是:断电兜底,保证下次开机不会回到 1970。6.两个时间的角色分工RTC:掉电持久存储(兜底)NTP 网络:权威基准(校准源)系统时钟:内核软件时钟,所有程序