Linux Kernel RTC驱动使用hwclock调试

news2024/11/28 19:01:40

hwclock

hwclock的源码路径:sys-utils/hwclock.c
源码:

if (opt & HWCLOCK_OPT_HCTOSYS)
        to_sys_clock(&rtcname, utc);
    else if (opt & HWCLOCK_OPT_SYSTOHC)
        from_sys_clock(&rtcname, utc);
    else if (opt & HWCLOCK_OPT_SYSTZ)
        set_system_clock_timezone(utc);
    else
        /* default HWCLOCK_OPT_SHOW */
        show_clock(&rtcname, utc);

---

static void from_sys_clock(const char **pp_rtcname, int utc)
{
#if 1
    struct timeval tv;
    struct tm tm_time;
    int rtc;

    rtc = rtc_xopen(pp_rtcname, O_WRONLY);
    gettimeofday(&tv, NULL);		//精确时间。它的精度可以达到微妙,是C标准库的函数。
    /* Prepare tm_time */
    if (sizeof(time_t) == sizeof(tv.tv_sec)) {
        if (utc)
            gmtime_r((time_t*)&tv.tv_sec, &tm_time);
        else
            localtime_r((time_t*)&tv.tv_sec, &tm_time);
    } else {
        time_t t = tv.tv_sec;
        if (utc)
            gmtime_r(&t, &tm_time);
        else
            localtime_r(&t, &tm_time);
    }
#else
...
#endif
   tm_time.tm_isdst = 0;
   xioctl(rtc, RTC_SET_TIME, &tm_time);   
   if (ENABLE_FEATURE_CLEAN_UP)
       close(rtc);
}

hwclock将会从rtc硬件(寄存器)中读取时间或往rtc硬件中写入时间,与rtc硬件息息相关。

  xioctl(rtc, RTC_SET_TIME, &tm_time);   

将会调用到const char **pp_rtcname指代的那个rtc设备的ioctl

测试过程1
date 设置系统时间
通过hwclock -s 从rtc读取时间设置给系统
date检查时间是否同步
在这里插入图片描述

测试过程2
date 设置系统时间
通过hwclock -w 将系统时间设置给RTC
通过hwclock -r 读取RTC硬件时间检验是否等于系统时间
在这里插入图片描述
这次出现了问题
问题根源在于无法设置RTC时间

如果系统中/dev下有多个rtc设备,那么运行hwclock命令时必须带上-f 指定使用哪个rtc设备,否则会报错hwclock: RTC_RD_TIME: Invalid argument或者hwclock: RTC_SET_TIME: Invalid argument

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可加模型的一个简单示例

Additive Models to avoid the curse of dimensionality and for better interpretability we assume m ( x ) E ( Y ∣ X x ) c ∑ j 1 d g j ( x j ) m(\boldsymbol{x})E(Y|\boldsymbol{X}\boldsymbol{x})c\sum_{j1}^dg_j(x_j) m(x)E(Y∣Xx)cj1∑d​gj​(xj​) ⟹ \L…

高压放大器和示波器的关系是什么

高压放大器和示波器是电子工程领域中常见的两种设备,它们在实际的电路设计、测试和分析中都扮演着重要的角色。下面安泰电子将从定义、功能、应用场景等方面为您介绍高压放大器和示波器的关系。 图:ATA-7000系列高压放大器 一、高压放大器的定义及功能 高…

【软件测试】软件测试理论总结笔记(一)

软件测试理论总结 1.Introduction1.1 What is Software Bug1.3 Tester的职责和目标其他概念 2.软件开发生命周期Software Development ProcessSoftware Development Lifecycle Models2.1 TDD - Test-Driven Development测试驱动开发(一种敏捷开发)Softwa…

Chrome浏览器无痕浏览真的无痕吗?

当您启用无痕浏览后,设备的其他用户将不会看到您的历史记录。 Chrome 不会保存您的浏览记录或您在表单中填写的信息。当您浏览时,Chrome 会记住相应的 Cookie 和网站数据,但当您退出无痕模式时,Chrome 会删除这些数据。您可在打开…

【Android】Binder(一)Binder的介绍和AIDL使用Binder的实例

Binder介绍 Android 中的 Binder 是一个进程间通信机制,它允许不同进程之间相互调用方法和传递数据。Binder 主要用于实现系统服务和应用程序之间的通信,以及实现 IPC(Inter-Process Communication,进程间通信)。 Bi…

陪诊APP小程序开发 陪伴就医告别孤独

生活工作忙碌,很多情况下父母或者其他亲人需要去医院的时候没办法陪同,让其单独去又不放心成为令很多人苦恼的问题。随着移动互联网的深入到我们生活的方方面面,医疗行业也出现了很多陪诊服务APP小程序系统软件,让孤独就医者有人陪…

Android H5拉起安卓原生方案的介绍与实战(六一篇)

一、介绍 今天是6.1儿童节,祝大家儿童节快乐。 言归正传,开始介绍H5拉起原生。如今,在APP应用中,消息大多数采用推送方式比较多,到达率很低或者说无法满足业务的需求。在一些大型活动中,依然需要短信的参与…

网络安全:SQL 注入漏洞

一、漏洞描述 WordPress是一个用PHP编写的免费开源内容管理系统,由于clean_query函数的校验不当,导致了可能通过插件或主题以某种方式从而触发SQL注入的情况。这已经在WordPress5.8.3中进行了修复。影响版本可以追溯到3.7.37。 二、漏洞分析 在分析整…

平台使用篇 | 批处理(bat)脚本使用教程(四)

导读 一个开启多机软件在环仿真的批处理文件 (对应卓面RflyTools文件夹中SITLRun快捷方式),双击它,输入想要生成的飞机数量,即可生成多机软件在环仿真,等待RflySim3D显示3DFixed 4/4,然后可通过QGC控制飞机起飞。运行…

Unity API详解——Time类

Time类是Unity中获取时间信息的接口类,只有静态属性。本博客介绍Time类的一些静态属性。 一、Time类静态属性 在Time类中,涉及的静态属性有realtimeSinceStartup、smoothDeltaTime和time属性,在介绍time属性时涉及了Time类的多个其他属性的…

学姐生日快到了~这不得用Python把她的照片做成视频当礼物送给她....

前言 这不是学姐生日快到了,于是我学了一手Python~ 来把学姐的照片生成为视频,到时候给她一个惊喜! 好了先不说了,下面分享一下用python代码 实现多张图片合成MP4视频为实例,做下详细代码讲解。 一、需要调入的模块…

设计模式之~迭代器模式

迭代器模式: 迭代器(Iterator)模式,又叫做游标(Cursor)模式。GOF 给出的定义为:提供一种方法顺序访问一个容器(container)对象中各个元素,而又不需暴露该对象…

数据库DBMS并发控制(1)

pgsql(PostgreSQL)常用命令行操作_pgsql常用命令_石头wang的博客-CSDN博客 重要:事务的操作和事务的性质 操作演示 四种典型数据不一致现象: 串行调度和可串行调度 串行调度 顾名思义 就是可以进行调度的意思 可串行调度 就是 一种和串行…

C Primer Plus第十六章编程练习答案

学完C语言之后,我就去阅读《C Primer Plus》这本经典的C语言书籍,对每一章的编程练习题都做了相关的解答,仅仅代表着我个人的解答思路,如有错误,请各位大佬帮忙点出! 由于使用的是命令行参数常用于linux系…

常见的ACL攻击方式,集权设施如何防御攻击?

本文主要介绍了 WindowsAD域中基于访问控制列表(ACL)的攻击,在AD域的攻击手法中,基于ACL的攻击由于理解起来比较困难,现有的安全设备也很少有对ACL的监控,这种类型的攻击通常会被安全人员所忽视。 1.什么是…

[SpringBoot]创建聚合项目

首先&#xff0c;创建父级项目&#xff1a; 因为手动添加依赖&#xff0c;以下只选版本不打钩 因为父项目不写代码&#xff0c;所以删除src 调整pom.xml文件&#xff08;并刷新maven&#xff09;&#xff0c;如下&#xff1a; <?xml version"1.0" encoding&qu…

如何入门渗透测试

1. 什么是渗透测试 渗透测试就是模拟真实黑客的攻击手法对目标网站或主机进行全面的安全评估&#xff0c;与黑客攻击不一样的是&#xff0c;渗透测试的目的是尽可能多地发现安全漏洞&#xff0c;而真实黑客攻击只要发现一处入侵点即可以进入目标系统。 一名优秀的渗透测试工程…

Flink SQL之Regular Joins

1.Regular Joins&#xff08;双流join&#xff09; 双流join是最通用的联接类型&#xff08;支持 Batch\Streaming&#xff09;&#xff0c;其中任何新记录或联接两侧的更改都是可见的&#xff0c;并影响整体的Join结果。 特点&#xff1a; 对于流式查询&#xff0c;双流join…

深入分析 OpenShift 内部 DNS

深入分析 OpenShift 内部 DNS OpenShift 中的DNS 相关组件及其配置1.1 Pod 中的 DNS 配置1.2 Pod 所在宿主机上的 DNS 配置及服务1.2.1 resolv.conf 文件 DNS 配置DNS 查询流程为什么需要内部 DNS&#xff1f; 本文基于 OpenShift 3.11&#xff0c;Kubernetes 1.11 进行测试 O…

Linux服务器禁止密码登录,设置秘钥登录

生成SSH密钥 (客户机端) 执行ssh-keygen -t rsa命令创建RSA密钥对&#xff0c;执行结果如下(键入3次回车)&#xff1a; [rootnode01 .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): [回车] En…