当前位置: 首页 > news >正文

OK3568 RTC 驱动适配与 Linux 系统时间管理总结

OK3568 RTC 驱动适配与 Linux 系统时间管理总结

文章目录

  • OK3568 RTC 驱动适配与 Linux 系统时间管理总结
    • 一、背景
    • 二、适配步骤
      • 2.1 I2C 总线确认
      • 2.2 驱动文件确认
      • 2.3 修改设备树
      • 2.4 内核配置开启 RX8010 驱动
      • 2.5 烧写验证
    • 三、RTC 与系统时间的关系(核心知识点)
      • 3.1 两个时钟的区别
      • 3.2 上电同步:hctosys
      • 3.3 运行期间的同步命令
      • 3.4 时区注意
    • 四、调试过程与问题解决
      • 4.1 问题一:Frequency stop 告警
    • 五、BMS 场景的时间管理方案
    • 六、总结

一、背景

硬件平台RTC 芯片
FCU2601 核心板RX8010SJ(EPSON)
OK3568 开发板PCF8563(NXP)
BCU3.0 产品RX8010SJ

BCU3.0 使用的核心板与 OK3568 开发板一致(都是飞凌的 OK3568-C),但 RTC 芯片从 PCF8563 换成了 RX8010SJ,因此需要将软件从 PCF8563 适配到 RX8010SJ。


二、适配步骤

2.1 I2C 总线确认

查看 BCU3.0 原理图与 OK3568 原理图,两颗 RTC 芯片都挂在 RK3568 的I2C3总线上:

芯片I2C 地址
RX80100x32
PCF85630x51

I2C 总线驱动不需要修改,只需调整设备树。

2.2 驱动文件确认

OK3568 SDK 内核源码中已包含两套 RTC 驱动:

lskernel/drivers/rtc/rtc-rx8010.clskernel/drivers/rtc/rtc-pcf8563.c

不需要自己编写驱动,关键是要在内核配置中启用 RX8010 驱动

2.3 修改设备树

文件位置:

OK3568_Linux_fs/kernel/arch/arm64/boot/dts/rockchip/OK3568-C-common.dtsi

修改前(原代码):

&i2c3 { status = "okay"; rx8010: rx8010@32 { compatible = "epson,rx8010"; reg = <0x32>; }; pcf8563: pcf8563@51 { compatible = "nxp,pcf8563"; reg = <0x51>; #clock-cells = <0>; }; };

修改后:

&i2c3 { status = "okay"; rx8010: rx8010@32 { compatible = "epson,rx8010"; reg = <0x32>; status = "okay"; /* 启用 RX8010 */ }; pcf8563: pcf8563@51 { compatible = "nxp,pcf8563"; reg = <0x51>; status = "disabled"; /* 禁用 PCF8563 */ }; };

关键变化:RX8010 加status = "okay",PCF8563 加status = "disabled"。确保同一 I2C 总线上只有一颗 RTC 芯片被使能。

2.4 内核配置开启 RX8010 驱动

这是整个适配中最容易被忽略的一步。默认的 OK3568 板级 defconfig 中 RX8010 驱动未使能

zcat /proc/config.gz|grepRX8010# 输出:# CONFIG_RTC_DRV_RX8010 is not set

需要修改板级 defconfig(注意:直接make menuconfig.config无效,因为飞凌的build.sh kernel每次会用 defconfig 覆盖.config):

cd/home/forlinx/3568/OK3568-linux-source/kernel/arch/arm64/configs/vimOK3568-C-linux_defconfig

在文件末尾添加:

CONFIG_RTC_DRV_RX8010=y

保存后重新编译内核:

cd/home/forlinx/3568/OK3568-linux-source ./build.sh kernel

编译完成后验证:

grepRX8010 kernel/.config# 预期输出:CONFIG_RTC_DRV_RX8010=y

2.5 烧写验证

将新生成的boot.img烧写到开发板 boot 分区,重启后验证:

# 1. 确认驱动已编译进内核zcat /proc/config.gz|grepRX8010# → CONFIG_RTC_DRV_RX8010=y# 2. 确认驱动注册成功dmesg|grep-irtc# → rtc-rx8010 3-0032: rtc core: registered rx8010 as rtc0# → rtc-rx8010 3-0032: setting system clock to 2026-06-05 02:35:21 UTC# 3. 确认设备节点存在ls/dev/rtc*# → /dev/rtc /dev/rtc0

三、RTC 与系统时间的关系(核心知识点)

3.1 两个时钟的区别

┌─────────────────────────────────────────┐ │ Linux 系统 │ │ │ │ 系统时间 (Software Clock) │ │ · 内核维护的软件计数器 │ │ · date / timedatectl 查看 │ │ · 纳秒级精度 │ │ · 基于 CPU 定时器中断累加 │ │ · ❌ 断电丢失,重启归零 │ │ │ │ ↕ hwclock 命令 │ │ │ │ RTC 硬件时钟 (Hardware Clock) │ │ · I2C 芯片 RX8010 内部计时 │ │ · hwclock -r 查看 │ │ · 秒级精度 │ │ · 32.768kHz 晶振 │ │ · ✅ Vbat 供电 → 断电保持 │ └─────────────────────────────────────────┘
系统时间RTC 硬件时钟
存储位置内核内存变量I2C RTC 芯片寄存器
断电后丢失保持
精度纳秒级秒级
读取命令datehwclock -r
写入命令date -shwclock -w

3.2 上电同步:hctosys

Linux 内核启动时,如果开启了CONFIG_RTC_HCTOSYS=y,会自动从 RTC 读取时间并设置为系统时间:

zcat /proc/config.gz|grepHCTOSYS# → CONFIG_RTC_HCTOSYS=y# → CONFIG_RTC_HCTOSYS_DEVICE="rtc0"

dmesg 日志中能看到:

rtc-rx8010 3-0032: setting system clock to 2026-06-05 02:35:21 UTC

这个过程是内核自动完成的,不需要用户编写任何代码。

3.3 运行期间的同步命令

场景命令说明
查看系统时间date本地时区显示
查看 RTC 时间sudo hwclock -r读硬件时钟
RTC → 系统sudo hwclock -shctosys 手动版
系统 → RTCsudo hwclock -wsystohc
查看完整信息timedatectl status含时区、NTP 状态
设置系统时间sudo date -s "2026-06-05 15:30:00"临时校准

3.4 时区注意

RTC 硬件时钟通常存储UTC 时间(内核驱动默认行为),系统时间显示为本地时间+08:00北京时区)。

dmesg 里看到的是 UTC:02:35:21 UTCdate显示是10:35:21 CST,差了 8 小时是正常的。

应用程序拿时间用time()/gettimeofday()取系统时间即可,时区转换由系统处理。


四、调试过程与问题解决

4.1 问题一:Frequency stop 告警

首次上电后 dmesg 出现:

rtc-rx8010 3-0032: Frequency stop was detected rtc-rx8010 3-0032: hctosys: unable to read the hardware clock

原因:RX8010 上电后检测到内部振荡器曾停振(XST 标志位),驱动拒绝读取时钟。这是新芯片首次上电、或者 Vbat 备份电源掉过电的典型现象。

解决:先用hwclock -w写入一次系统时间,驱动写入操作会清除 XST 标志:

# 先随便设一个系统时间(或从网络获取)sudodate-s"2026-06-05 15:30:00"# 写入RTC(同时清除XST标志)sudohwclock-w-f/dev/rtc0# 验证读数正常sudohwclock-r-f/dev/rtc0

写入成功后,Frequency stop告警消失,hctosys恢复正常。

五、BMS 场景的时间管理方案

BCU3.0 常规运行不联网,没有 NTP 时间源。时间同步闭环如下:

上电启动 └── 内核 hctosys:RTC → 系统时间(自动,零代码) │ 运行期间(104 主站对时) └── 收到时钟同步指令 ├── settimeofday() 校准系统时间 └── hwclock -w 写入 RTC │ 下次断电再上电 └── RTC 保持正确时间 → hctosys → 系统时间恢复
环节负责方是否需要自己写代码
上电 RTC→系统内核CONFIG_RTC_HCTOSYS=y不需要
运行中读取时间time()/gettimeofday()一行调用
时间校准104 主站下发对时指令需实现 handler
校准后写回 RTChwclock -w一行命令
故障录波时间戳直接从系统时间取不需要

六、总结

RTC 驱动的适配本质上是三件事:

  1. 设备树——让内核知道 I2C3 上挂了什么芯片
  2. 内核配置——把对应驱动编译进去(CONFIG_RTC_DRV_RX8010=y
  3. 理解 RTC 与系统时间的关系——启动自动同步(hctosys)、运行中读写(hwclock)、断电保持(备份电池)

整个过程中不需要自己写一行 RTC 驱动代码,内核社区已经做好了全部工作。你的应用程序只需要time()取系统时间即可,RTC 对上层透明。


参考资料

  • EPSON RX8010SJ Datasheet
  • Linux kernel RTC subsystem
  • 飞凌 OK3568-C 开发板资料
  • 前篇:OK3568 设备树适配 RX8010

最后更新:2026-06-05

http://www.jsqmd.com/news/956575/

相关文章:

  • 劳特巴赫TRACE32:嵌入式硬件调试与追踪的终极解决方案
  • AI绘画商用翻车实录:从接单到被告仅11天(附律师紧急止损4步法)
  • AI编排:企业级系统与大模型协同落地的核心范式
  • STM32F2 ADC固件库V2.0.2深度解析:从寄存器原理到DMA实战应用
  • 如何快速解决ComfyUI图像处理中的7个常见痛点:终极完整指南
  • 五步打造炫酷加载动画:用快马AI快速生成交互原型提升用户体验
  • QQScreenShot独立版:告别登录烦恼,3分钟掌握专业级截图技巧
  • 2026年绥化黄金回收白银回收铂金回收金条回收高口碑 5 家线下门店实地测评整理 - 信誉隆金银铂奢回收
  • MeshCentral远程设备管理平台终极指南:三步打造企业级监控系统
  • MuleSoft+LLM企业级AI编排:可审计、可回滚、可嵌入业务主干的生产级实践
  • 2026年6月无锡黄金回收行情速览:实时金价同步度对比+6家报价透明店推荐 - 天天生活分享日志
  • Sqribble模板驱动文档自动化:告别复制粘贴,实现结构化内容批量生成
  • 2026年杭州口碑好的别墅车库门生产厂家推荐:厂家直销、支持定制、质保十年 - 速递信息
  • 告别‘No FileSystem for scheme hdfs‘:深入解读Hadoop core-site.xml中fs.hdfs.impl配置项的来龙去脉
  • 如何用自动化配置引擎简化OpenCore EFI创建?OpCore-Simplify技术解析
  • Winhance技术解析:基于C的Windows系统优化框架深度剖析
  • bert-base-portuguese-cased API完全参考:fill-mask与特征提取的Python实现示例
  • 深度解析JSON Viewer架构设计与高级配置实战
  • 膜结构车棚选谁做?这几家落地服务商各有门道,别踩坑再说 - 深度智识库
  • 利用快马平台与mcp协议,十分钟搭建你的第一个ai工具集成原型
  • deberta-v3-base-prompt-injection集成Langchain教程:打造安全的LLM应用流水线
  • 效率倍增:用快马AI自动化你的走马观碑式文档分析工作流
  • MOOTDX:重构量化投资数据基础设施的Python原生解决方案
  • Aimmy终极指南:如何用免费AI瞄准助手提升游戏体验
  • 2026年6月连云港Ai搜索优化排名/GEO/GEO优化/搜索优化/GEO优化服务厂家解析,认准连云港摘星人工智能科技有限公司 - 2026年企业资讯
  • Windows 11终极精简优化指南:Win11Debloat让你的系统跑得更快更干净
  • 进阶实战:深度解析PyTorch ConvLSTM在时空序列预测中的专业应用
  • SciCore-Omics数据预处理终极指南:如何准备高质量输入数据的最佳实践 [特殊字符]
  • 2026最新的 草坪减震垫优质生产厂家实力排行盘点 推荐石家庄跃荣新材料科技有限公司 - 奔跑123
  • 终极指南:使用bert-fa-base-uncased-ner-arman-openmind实现99.84% F1分数的波斯NER系统