You need to enable JavaScript to run this app. 华硕Tinkerboard外接DS3231 RTC板后系统时间未从RTC同步
优惠活动
大模型
产品
解决方案
定价
更多

华硕Tinkerboard外接DS3231 RTC板后系统时间未从RTC同步

故障根因分析
  • 系统默认RTC软链接/dev/rtc指向/dev/rtc0(华硕TinkerBoard板载无后备电池的原生RTC),外接DS3231对应的/dev/rtc1未被系统自动同步逻辑识别为默认RTC
  • 开机阶段的RTC时间同步仅读取默认RTC(rtc0),而rtc0因无后备电池,关机后仅能保留关机时系统写入的时间(你测试时的18:00+正确日期),因此出现「系统日期正确、时间停留在关机时刻」的现象
  • 外接DS3231(rtc1)走时正常,但未参与开机自动同步流程,因此存储的18:15正确时间未被写入系统时钟
排查步骤

基础配置核验

  • 查看默认RTC指向:执行ls -l /dev/rtc,确认是否指向/dev/rtc0
  • 确认RTC节点对应芯片:执行cat /sys/class/rtc/rtc1/name,验证返回值是否包含ds3231
  • 查看hwclock服务默认配置:执行cat /etc/default/hwclock(或/etc/sysconfig/hwclock,依发行版实际路径调整),确认是否硬编码指定了rtc0为默认读取节点
  • 检查内核启动参数:执行cat /proc/cmdline,排查是否存在rtc.dev=rtc0之类的强制指定参数

驱动优先级核验

  • 查看RTC驱动加载顺序:执行dmesg | grep rtc,确认rtc0和rtc1的加载先后顺序,是否rtc0被优先绑定为默认RTC
  • 验证设备树配置:检查DS3231对应的设备树节点是否设置status = "okay",compatible参数是否为maxim,ds3231
解决方案

方案1:永久将rtc1设为默认RTC(推荐)

修改hwclock服务默认参数

编辑/etc/default/hwclock,新增/修改如下配置:
HWCLOCK_ARGS="--rtc /dev/rtc1"
该配置会让所有系统默认的hwclock同步/写入逻辑都指向DS3231对应的rtc1。

调整udev规则永久修改/dev/rtc软链接

新建/etc/udev/rules.d/99-default-rtc.rules,添加以下内容:
SUBSYSTEM=="rtc", KERNEL=="rtc1", SYMLINK+="rtc", OPTIONS+="link_priority=100"
规则生效后,开机自动将/dev/rtc软链接指向rtc1,优先级高于原有指向rtc0的默认规则。

(可选)禁用板载rtc0加载

如果不需要使用板载RTC,可新建/etc/modprobe.d/blacklist-tinkerboard-rtc.conf,添加对应板载RTC驱动的黑名单:
blacklist <板载RTC驱动名称>
驱动名称可通过ls /sys/class/rtc/rtc0/device/driver/ | head -1获取。

方案2:添加开机强制同步rtc1脚本(备用)

如果上述配置修改未生效,可直接在开机自启脚本中添加强制同步命令:

  • 编辑/etc/rc.local(需确保该文件有可执行权限),在exit 0前添加:
    /sbin/hwclock --rtc /dev/rtc1 --hctosys
  • 若使用systemd管理自启,可新建/etc/systemd/system/rtc1-sync.service,配置服务在multi-user.target阶段启动,执行上述hwclock命令,且启动优先级高于NTP服务。
验证方法
  • 配置完成后执行sudo reboot,断电静置15分钟以上再上电
  • 查看系统时间是否与rtc1的走时一致
  • 执行hwclock --get(不带-f参数),确认默认读取的RTC时间为rtc1的存储值

内容的提问来源于stack exchange,提问作者SteMMo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.29 09:54:02