关于如何同步开发板的时间和现在一样:
重启后开发板时间再次回到 2015 年,说明硬件时钟(RTC)未正确保存时间或系统未从 RTC 读取时间,问题可能出在以下几个方面,按步骤排查修复即可:
一、确认硬件时钟(RTC)是否正常工作
- 查看当前硬件时钟时间
输入命令hwclock
或hwclock --show
,观察输出:- 如果显示的时间也是
2015年1月1日
,说明之前的hwclock -w
命令未成功将系统时间写入 RTC,或 RTC 硬件故障(如无电池、电池没电)。 - 如果显示的是你之前设置的正确时间(2025-07-19 17:36),则问题是系统开机时未从 RTC 读取时间。
- 如果显示的时间也是
二、针对性解决:
情况 1:硬件时钟(RTC)未保存时间(hwclock
显示错误)
重新写入 RTC 并验证
- 先重新设置系统时间:
bash
date -s "2025-07-19 17:36:00" # 设置正确系统时间
- 强制写入硬件时钟(加
-f
指定 RTC 设备,部分开发板需要):bash
hwclock -w -f /dev/rtc0 # 多数开发板RTC设备为/dev/rtc0,若不存在可尝试/dev/rtc
- 立即查看 RTC 是否保存成功:
bash
hwclock -f /dev/rtc0 # 若显示2025-07-19 17:36,则写入成功
- 先重新设置系统时间:
检查 RTC 硬件(如电池)
如果多次写入后,hwclock
仍显示错误时间,可能是开发板的 RTC 备用电池没电或接触不良,需要物理检查硬件(部分开发板需要外接纽扣电池维持 RTC 供电)。
情况 2:RTC 时间正确,但系统开机不读取(hwclock
显示正确,date
错误)
系统默认可能未配置 “开机时从 RTC 同步时间”,需要手动添加启动脚本:
- 编辑系统启动初始化文件(不同开发板路径可能不同,常见路径如下):
bash
vi /etc/init.d/rcS # 或 /etc/rc.local、/etc/profile
- 在文件末尾添加以下命令(同步 RTC 时间到系统时间):
bash
hwclock -s -f /dev/rtc0 # -s 表示从RTC读取时间到系统
- 保存文件并重启开发板,验证时间是否正确:
bash
reboot # 重启后输入 date 查看是否为正确时间
三、终极解决方案:若 RTC 硬件故障,用脚本强制同步(临时替代)
如果 RTC 彻底无法使用,可通过开机脚本强制设置时间(适合临时调试,断电后仍会丢失):
- 编辑启动文件(如
/etc/init.d/rcS
),添加:bash
# 每次开机强制设置为固定时间(需定期更新脚本) date -s "2025-07-19 17:36:00"
- 保存后重启,时间会被强制设置为脚本中的值。
按以上步骤操作后,重启开发板再次输入 date
,即可确认时间是否保持正确。核心是确保 “RTC 能保存时间” 且 “系统开机时读取 RTC”。
目前的状态是:硬件时钟(RTC)时间正确,但系统时区仍为 UTC(导致显示时间与北京时间相差 8 小时)。具体表现为:
hwclock -f /dev/rtc0
显示正确时间(2025-07-19 17:43),说明 RTC 保存正常;date
显示时区为UTC
,而我们需要的是CST
(中国标准时间,UTC+8)。
解决时区问题的关键步骤(确保永久生效):
1. 手动创建 / 替换时区配置文件
如果 /usr/share/zoneinfo/Asia/Shanghai
存在:
bash
# 强制将时区设置为上海(覆盖原有时区配置)
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
如果上述文件不存在(部分精简系统可能缺少),直接写入时区环境变量到启动脚本:
bash
# 编辑启动文件(确保开机时加载时区)
echo 'export TZ="Asia/Shanghai"' >> /etc/profile
# 立即生效当前终端的时区
source /etc/profile
2. 验证时区是否生效
执行 date
命令,若输出包含 CST
则成功:
bash
date
# 正确结果示例:Sat Jul 19 17:43:13 CST 2025 (时区从UTC变为CST)
3. 重启后再次确认
重启开发板:
bash
reboot