uboot中取时间的函数是将时钟寄存器中的值取出后,加上那个固定值(如1900年),直接返回,如果时间寄存器中放的是12年的秒数,在u-boot中就会显示是1912年。
linux kernel计算日期中有点不同,在算出年号后(加上1900年),接着判断,年号<=1969,再加上100,所以同样时间寄存器值将会校正为2012了。
你的系统显示不一致,可能原因是u-boot和伍森衡kernel源代码移植春判不完整,u-boot和kernel实时时钟的存储和计算策略不一致。
RTC(实时钟)借助电池供电,在系统掉电铅芹的情况下依然可以正常计时。它通常还具有产生周期性中断以及闹钟(Alarm〉中断槐尺毕的能困差力,是一种典型的字符设备。作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open () 、release () 、read () 、poll () 、ioctl ()等,而典型的IOCTL包括RTC_SET_TIME、RTC_ALM_READ、RTC_ALM_SET、RTC_IRQP_SET、RTC_IRQP_READ等,这些对于所有的RTC是通用的,只有底层的具体实现是与设备相关的。因此,drivers/rtc/tc-dev.c实现了RTC驱动通用的字符设备驱动层,它实现了file_opearations的成员函数以及一些通用的关于RTC的控制代码,并向底层导出rtc_device_register () 、rtc_device_unregister ()以注册和注销RTC导出rtc_class_ops结构体以描述底层的RTC硬件 *** 作。这个RTC通用层实现的结果是,底层的RTC驱动不再需要关心RTC作为字符设备驱动的具体实现,也无需关心一些通用的RTC控制逻辑。a、mktime头文件:#include <time.h>
函数:time_t mktime(struct tm *timeptr)
函数说明:培码mktime()用来将timeptr所指的tm结构体数据换成从高棚公元1970年1月1日0时0分0 秒算起至今的本地时间所经过的秒数。
返回值:返回经过的秒数。当发生错误的时候,返回-1。
b、settimeofday
头文件:#include <sys/time.h>
#include <unistd.h>
函数:int settimeofday(const struct timeval *tv,const struct timezone *tz)
函数说明:settimeofday()会把目前时间设成由tv所指的结构体信息,当地时区信息则设成tz所指的结构体配念哪。
返回值:只有root权限才能使用此函数修改时间。成功则返回0,失败返回-1,错误代码存于errno。
2、实践:
通过mktime和settimeofday配合使用,即可完成时间的写入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)