1. 前言
限于作者能力水平,本文可能存在的谬误,因此而给读者带来的损失,作者不做任何承诺。
2. 背景
本文分析代码基于Linux 3.10
内核,硬件平台为嵌入式ARM32
平台.
3. rtc子系统
3.1 相关代码文件列表
drivers/rtc/class.c
drivers/rtc/interface.c
drivers/rtc/rtc-core.h
drivers/rtc/rtc-dev.c
drivers/rtc/rtc-lib.c
drivers/rtc/rtc-proc.c
drivers/rtc/rtc-sysfs.c
drivers/rtc/hctosys.c
drivers/rtc/rtc-xxx.c
对上面文件的说明:
class.c : 管理rtc sys class;
interface.c: 主要作用是间接rtc驱动接口;
rtc-dev.c : rtc设备用户接口;
rtc-lib.c : rtc辅助函数,主要用于rtc时间转换,计算;
rtc-proc : rtc proc fs(用户)接口;
rtc-sysfs : rtc sys fs(用户)接口;
hctosys.c : 用于在系统启动时从rtc读取时间,并设置为系统时间;
rtc-xxx.c : rtc硬件芯片驱动,如rtc-wm8350.c,rtc-hym8563.c等.
3.2 rtc子系统框图
上图是基于新的rtc子系统框架,该框架能更好的适应嵌入式开发环境,嵌入式环境可能带多个rtc芯片。
老的rtc驱动就是一个简单的字符设备驱动,是适应于PC平台的,对应有一个/dev/rtc
设备文件。
在新的rtc子系统框架下,应用程序通过/dev/rtc[0-N]
设备来完成对rtc芯片的访问。这些访问通过rtc-dev.c
提供的接口间接访问rtc-xxx.c
提供的rtc芯片驱动。常见的操作有读取/设置时间的操作,这个每个rtc芯片都必须支持的操作。
当然,访问/dev/rtc[0-N]设备文件不是访问rtc芯片的唯一途径,还可以通过rtc提供的proc fs,sys fs
接口来访问rtc。
3.3 指定系统时间来源rtc设备
Device Drivers --->
[*] Real Time Clock --->
(rtc0) RTC used to set system time
...
*** RTC interfaces ***
...
*** I2C RTC drivers ***
...
*** SPI RTC drivers ***
...
*** on-CPU RTC drivers ***
...
上面的内核配置(rtc0) RTC used to set system time
,指定rtc0
作为系统时间来源的rtc设备。
4. 后记
本篇从个人51CTO博客(原地址)迁移过来。