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

  • 相关阅读:
    WebView加载URL跳转到系统浏览器的解决方法
    WebView 显示网页
    Android权限 uses-permission
    用android studio创建第一个安卓程序加载html5 页面
    html5-补充知识
    Web存储使用详解(本地存储、会话存储)
    sikuli
    java学习_文件工具类
    java学习___File类的查看和删除
    出现java.lang.NoClassDefFoundError: com/google/common/base/Charsets异常错误
  • 原文地址:https://www.cnblogs.com/lialong1st/p/11732283.html
Copyright © 2011-2022 走看看