Linux时间系统之RTC时间
(2019-01-05 22:26:25)
标签:
it |
分类: Linux操作系统 |
转载:Linux时间系统之RTC时间
struct timespec tv =
{
.tv_nsec = NSEC_PER_SEC >> 1,
};
err = rtc_read_time(rtc,
&tm);
err =
do_settimeofday(&tv);
dev_info(rtc->dev.parent,
"setting system clock to "
"%d-d-d d:d:d UTC (%u)\n",
tm.tm_year + 1900, tm.tm_mon + 1,
tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec,
(unsigned int) tv.tv_sec);
一、概述
不知道有没有“时间系统”的说法,我们暂且把它作为Linux中和时间相关的内容的统称吧。
Linux时间有两个,系统时间(Wall Time),RTC时间。
系统时间(WT):由Linux系统软件维持的时间,比如command date:
$ date
2017年 02月 25日 星期六 16:58:10 CST
获取到的就是系统时间。
RTC时间:这个时间来自我们设备上的RTC芯片,通过command hwclock 可以读取:
# hwclock -r --> root权限才可以运行
2017年02月25日 星期六 17时01分57秒 -0.906462
seconds
我们通过man查看hwclock的介绍:
hwclock - query or set the hardware clock (RTC)
接下来,通过代码看下两者的关系。
二、WT时间和RTC时间
WT时间来自于RTC时间,流程是:
上电-->RTC驱动加载-->从RTC同步时间到WT时间
上代码:
hctosys.c (drivers\rtc)
static int __init rtc_hctosys(void)
{
}
late_initcall(rtc_hctosys);
late_initcall说明系统在启动流程的后面才会调用该函数去同步时间。关于late_initcall可见最后PS。
接下来从底层到上层进行梳理。
三、RTC时间框架
框架如图:
注:图中hwclock.c笔误,实为hctosys.c
Hardware:提供时间信息(time&alarm),通过一定的接口(比如I2C)和
RTC Driver:进行交互。Driver完成硬件的访问功能,提供访问接口,以驱动的形式驻留在系统。注册方式由
class.c:文件提供。驱动注册成功后会构建rtc_device结构体表征的rtc设备,并把rtc芯片的操作方式存放到rtc设备的ops成员中
interface.c:文件屏蔽硬件相关的细节,向上提供统一的获取/设置时间或Alarm的接口
rtc-lib.c:文件提供通用的时间操作函数,如rtc_time_to_tm、rtc_valid_tm等
rtc-dev.c:文件在/dev/目录下创建设备节点供应用层访问,如open、read、ioctl等,访问方式填充到file_operations结构体中
hctosys.c/rtc-sys.c/rtc-proc.c:看名字就知道其作用
接下来从驱动一层一层看下
四、RTC驱动
驱动主要工作是填充rtc_class_ops结构体,结构体描述了RTC芯片能够提供的所有操作方式:
。。。。。。。。。。。。。。。。
前一篇:Linux系统时间与RTC时间