zoukankan      html  css  js  c++  java
  • [Linux] RTC 读写指令及测试程序

    CPU:RK3288

    系统:Linux

    IC:hym8563

    在 Linux 系统中,指令 date 和 hwclock 都可以读写时间

    date:读写系统时间,写时间需要管理员权限

    hwclock:读写硬件时间,也就是 rtc 模块的时间,读写都必须有管理员权限

    // 读取当前系统时间
    $ date
    Thu Oct 24 03:03:13 UTC 2019
    // 普通用户设置时间失败
    $ date 102411032019.00
    date: cannot set date: Operation not permitted
    Thu Oct 24 11:03:00 UTC 2019
    // 超级用户设置时间成功,格式:月日时分年.秒
    $ sudo date 102411032019.00
    Thu Oct 24 11:03:00 UTC 2019
    // 读取当前系统时间,确认时间设置成功
    // 小时与设置的11点不同,这是由于时区造成的
    $ date
    Thu Oct 24 03:03:38 UTC 2019

    设置时区的问题,请参考:[Linux] 通过指令修改时区 tzselect

    $ date
    Thu Oct 24 14:22:50 CST 2019
    // 查看硬件时间
    $ sudo hwclock
    Thu 24 Oct 2019 02:22:54 PM CST  .744709 seconds
    // 查看硬件时间
    $ sudo hwclock -r
    Thu 24 Oct 2019 02:22:54 PM CST  .744709 seconds
    // 查看硬件时间
    $ sudo hwclock -show
    Thu 24 Oct 2019 02:22:54 PM CST  .744709 seconds
    // 修改硬件时间,与系统时间相同
    $ sudo hwclock -w
    // 修改系统时间,与硬件时间相同
    $ sudo hwclock -w

    rtc 测试 demo:

    #include <stdio.h>
    #include <stdlib.h>
    #include <linux/rtc.h>
    #include <sys/ioctl.h>
    #include <sys/time.h>
    #include <sys/types.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <errno.h>
    #include <time.h>
    
    int main(int argc, char *argv[])
    {
        int fd, retval;
        struct rtc_time rtc_tm;
        time_t timep;
        struct tm *p;
    
        fd = open("/dev/rtc", O_RDONLY);
        if (fd == -1) {
            fprintf(stderr, "open /dev/rtc error
    ");
            exit(errno);
        }
    
        /* Read the RTC time/date */
        retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
        if (retval == -1) {
            perror("ioctl");
            exit(errno);
        }
    
        fprintf(stderr, "RTC date/time: %d/%d/%d %02d:%02d:%02d
    ",
            rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
        time(&timep);
        p = gmtime(&timep);
        fprintf(stderr, "OS date/time(UTC): %d/%d/%d %02d:%02d:%02d
    ",
            p->tm_mday, p->tm_mon + 1, p->tm_year + 1900,
            p->tm_hour, p->tm_min, p->tm_sec);
        p = localtime(&timep);
        fprintf(stderr, "OS date/time(Local): %d/%d/%d %02d:%02d:%02d
    ",
            p->tm_mday, p->tm_mon + 1, p->tm_year + 1900,
            p->tm_hour, p->tm_min, p->tm_sec);
        
        rtc_tm.tm_mday = 15;
        rtc_tm.tm_mon = 11;
        rtc_tm.tm_hour = 15;
        rtc_tm.tm_min = 15;
        retval = ioctl(fd, RTC_SET_TIME, &rtc_tm);
        if (retval == -1) {
            perror("ioctl");
            exit(errno);
        }
        
        /* Write the RTC time/date */
        retval = ioctl(fd, RTC_RD_TIME, &rtc_tm);
        if (retval == -1) {
            perror("ioctl");
            exit(errno);
        }
    
        fprintf(stderr, "RTC date/time: %d/%d/%d %02d:%02d:%02d
    ",
            rtc_tm.tm_mday, rtc_tm.tm_mon + 1, rtc_tm.tm_year + 1900,
            rtc_tm.tm_hour, rtc_tm.tm_min, rtc_tm.tm_sec);
        time(&timep);
        p = gmtime(&timep);
        fprintf(stderr, "OS date/time(UTC): %d/%d/%d %02d:%02d:%02d
    ",
            p->tm_mday, p->tm_mon + 1, p->tm_year + 1900,
            p->tm_hour, p->tm_min, p->tm_sec);
        p = localtime(&timep);
        fprintf(stderr, "OS date/time(Local): %d/%d/%d %02d:%02d:%02d
    ",
            p->tm_mday, p->tm_mon + 1, p->tm_year + 1900,
            p->tm_hour, p->tm_min, p->tm_sec);
        
        close(fd);
            
        return 0;
    }

    参考:https://blog.csdn.net/u010703935/article/details/11728091

  • 相关阅读:
    Java 开源博客——B3log Solo 0.6.6 正式版发布了!
    Java 开源博客——B3log Solo 0.6.6 正式版发布了!
    <Linux> Xen虚拟机下挂载
    Android中的动画详解系列【3】——自定义动画研究
    ueditor批量上传word图片
    富文本编辑器word
    帝国CMS 7.2-插件包整合
    PHPCMS v9插件包整合
    富文本编辑器从word粘贴公式
    富文本编辑器直接从 word 中复制粘贴公式
  • 原文地址:https://www.cnblogs.com/lialong1st/p/11732283.html
Copyright © 2011-2022 走看看