MTK RTC默认时间定制浅析

 在android中,Linux内核中、rtc时钟,默认的起始日期都是1970年1月1日。

那么如何把默认日期指到2012-01-01呢?实践中发现,在RTC驱动中可以很容易实现。

 在RTC驱动加载的时候,一般都有个probe函数需要先执行,因此在probe函数里下手最直接有效。

RTC从1970-01-01开始,那当然很容易把默认值设置到2012-01-01,

 所需要设置的seconds也就是从1970-01-01所差的秒数,以秒为单位。

 因此,一旦读出来的RTC值小于我们预想的值比如2012-01-01(1325402913)小,

我们就把它设置到这个时间点。

 然后我们具体分析到MTK方案中如何修改,

MTK方案中,RTC 模块有自己独立出来的模块。

 该模块的实现文件是mtk_rtc.c.在该文件中,

我们根据上面的线索可以定位到rtc_pdrv_probe函数。

在改函数中有如下片断代码:

 .....rtc = rtc_device_register(RTC_NAME, &pdev->dev, &rtc_ops, THIS_MODULE);

 .....

上面函数注册了设备及相关操作设备的方法. rtc_ops这个结构体定义了我们操作rtc模块的方法,

代码如下:

static struct rtc_class_ops rtc_ops =

{

 .read_time = rtc_ops_read_time,

.set_time = rtc_ops_set_time,

 .read_alarm = rtc_ops_read_alarm,

.set_alarm = rtc_ops_set_alarm,

 };继续跟踪代码到rtc_ops_read_time函数,

其中有片断代码:

......

if RTC_OVER_TIME_RESET

if (unlikely(time > (unsigned long)LONG_MAX)) { rtc_reset_to_deftime(tm); rtc_tm_to_time(tm, &time); }

endif

......

我们可以看到rtc_reset_to_deftime(tm);从这个函数的名字就可以知道大概意思, 就是设置默认时间.上面函数有片断代码如下:

 ......

tm->tm_year = RTC_DEFAULT_YEA - 1900;

tm->tm_mon = RTC_DEFAULT_MTH - 1;

tm->tm_mday = RTC_DEFAULT_DOM;

......

RTC_DEFAULT_YEA 这个就是我们所需要找的东东.它的定义位于:mediatek\custom\ckt77_cu_ics2\kernel\rtc\rtc 目录下.分析完毕。

你可能感兴趣的:(android,驱动)