imx6ul+获取rtc时间

接上一节的rtc测试,不过这次是测试获取时间。

主函数更改了:
#include "so_lib.h"
#include "sl_perpheral.h"
#include "bsp_rtc.h"

DEBUG_SET_LEVEL(DEBUG_LEVEL_INFO);

int main(int argc, char** argv)
{
        int dev_fd;
        struct rtc_time tm;
        memset(&tm, 0, sizeof(struct rtc_time));
        dev_fd = rtc_init_time("2017-11-30 21:20:00");
        sleep(1);
        rtc_get_time(dev_fd, &tm);
        INFO("%d-%d-%d %d:%d:%d", tm.tm_year, tm.tm_mon, \
                                                        tm.tm_mday, tm.tm_hour, \
                                                        tm.tm_min, tm.tm_sec);
        rtc_deinit(dev_fd);
       
        return 0;
}
设置了时间后,一秒再读取rtc时间;


年月时间不对,后面刚好差1秒。

看了内核代码,时间是从1900开始计算的,更改获取rtc时间代码:
EXPORT int get_rtc_time(int dev_fd, struct rtc_time *rtc_tm)
{
        if (rtc_tm == NULL)
                return -1;
        struct rtc_time tmp;
        memset(&tmp, 0, sizeof(struct rtc_time));
        int ret = ioctl(dev_fd, RTC_RD_TIME, &tmp);
        if (ret == -1) {
                ERR("ioctl RTC_RD_TIME");
                return -1;
        }
        /* 调整时间,根据驱动来 */
        tmp.tm_year += 1900;
        tmp.tm_mon++;
        memcpy(rtc_tm, &tmp, sizeof(struct rtc_time));
        return ret;
}

重新编译,更新库,结果如下:


结果完全正确。这两个函数测试通过。

但是还有很多函数没测。。。
一个人心有余力不足,,希望大家一起加入哈。。



你可能感兴趣的:(linux学习过程)