Linux下验证rtc驱动是否工作正常,相关的的命令:date和hwclock。

先说明:
1.本贴主要内容来整理自后注所引用的帖子。
2.如下介绍,不涉及如何编写rtc驱动,只简单介绍,驱动实现后,如果通过date和hwclock去验证rtc驱动是否正常工作。

【基础知识】
1.date,Linux中用于显示/修改系统时间的一个命令。
2.Linux的RTC驱动实现完了后,一般是默认的是一个普通的字符型设备,或者一个misc设备,也可以是一个平台设备。
对应地,如果insomod驱动后,或者build-in到kernel后,对应的设备一般是
/dev/rtc 或 /dev/rtc0 或者 /dev/misc/rtc
3.hwclock,见名知意,hw clock, hardware clock,硬件(RTC)时钟。
对于hwclock,看看具体什么用途和用法(此处是嵌入式开发中用到的用busybox中的hwclock):
# hwclock --help
BusyBox v1.13.4 (2009-09-18 16:05:03 CST) multi-call binary

Usage: hwclock [-r|--show] [-s|--hctosys] [-w|--systohc] [-l|--localtime] [-u|--utc] [-f FILE]

Query and set hardware clock (RTC)

Options:
        -r      Show hardware clock time
        -s      Set system time from hardware clock
        -w      Set hardware clock to system time
        -u      Hardware clock is in UTC
        -l      Hardware clock is in local time
        -f FILE Use specified device (e.g. /dev/rtc2)

刚刚根据上面的解释,不知道别人如何,我是之前被-s和-w的解释搞晕了,也就后来用错了。。。。
所以,找了下,找到意思更清晰的,是man hwclock的解释,摘录相关部分如下:

hwclock -r or hwclock --show
hwclock -w or hwclock --systohc
hwclock -s or hwclock --hctosys

--show 
Read the Hardware Clock and print the time on Standard Output......
--hctosys 
Set the System Time from the Hardware Clock......
This is a good option to use in one of the system startup scripts. 
--systohc 
Set the Hardware Clock to the current System Time. 
上面的解释就很清楚了,用中文解释为:

hwclock –r        show, 显示硬件时钟, 等价于不加参数的hwclock。
hwclock –s        hctosys,hardware clock to system, 将“硬件时钟”RTC的时间写到Linux“系统”时钟里。
hwclock –w        systohc,system to hardware clock ,将“系统”时钟写到“硬件时钟”RTC里面。

运行hwclock,会自动去寻找对应的rtc设备,然后执行对应的操作。
网上所找到的,busybox中的对应的代码如下:
static const char *rtcname;

static int xopen_rtc(int flags)
{
int rtc;

if (!rtcname) {
   rtc = open("/dev/rtc", flags);
   if (rtc >= 0)
    return rtc;
   rtc = open("/dev/rtc0", flags);
   if (rtc >= 0)
    return rtc;
   rtcname = "/dev/misc/rtc";
}
return xopen(rtcname, flags);
}

4. 在Linux中有硬件时钟与系统时钟等两种时钟。
硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟,对于嵌入式开发,对应开发板上有对应的rtc模块。
系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。
所有Linux相关指令与函数都是读取系统时钟的设定。系统时钟的设定就是我们常用的date命令。
而我们写的RTC驱动就是为硬件时钟服务的,它有属于自己的命令hwclock。
因此,可以简单理解为,date命令操作Linux的系统(软件)时钟,hwclock命令操作硬件时钟(rtc模块)。
所以,对应地,我们要验证rtc驱动是否工作正常,只需要hwclock,
但往往又会涉及Linux的系统时钟和硬件时钟之间的同步等操作,所以,一般都是将date和hwclock一起搭配使用。

【用date和hwclock测试rtc驱动工作是否正常】
一般来说,最简单的测试rtc是否工作正常的步骤就是,在加载完rtc驱动后(或者本身驱动是已经编译进内核的):
1.显示当前Linux系统时间
date
[2].如果date时间也不正常,比如是1970年之类的,而不是我当前的时间,比如2009年,那么就自己手动设置一下正确时间
date MMDDhhmm[[YY]YY][.ss]
3.显示硬件rtc时间
hwclock
由于此处是rtc驱动第一次加载,还没设置正确的时间,所以此时显示的时间,多数是不正确的是1969,1970年。
4.将Linux系统时间设置到硬件rtc中
hwclock -w
5.再次查看硬件rtc时间是否和系统中的一致
hwclcok
如果驱动正确工作的话,此处显示的时间,就应该和你当前的系统时间一致了,也就是传说中的,时间同步了。。。
否则,就说明你驱动工作不正确,没有正确地把系统时间设置进入硬件rtc中,就要你自己回去调试驱动,找原因去。
6.等个几秒,再次输入:
hwclock
正常的话,会看到此处的时间,相对步骤5中显示的时间,增加了对应的那几秒
那就说明rtc正常工作了。

date

date可以设置、显示系统时间, 也可以计算时间

date用法: date [OPTIONS][+FMT] [TIME]

1.1显示系统时间

可以设定欲显示的格式,格式设定为一个加号后接数个标记,标记如下:

%n : 下一行
%t : 跳格
%H : 小时(00..23)
%I : 小时(01..12)
%k : 小时(0..23)
%l : 小时(1..12)
%M : 分钟(00..59)
%p : 显示本地 AM 或 PM
%r : 直接显示时间 (12 小时制,格式为 hh:mm:ss [AP]M)
%s : 从 1970 年 1 月 1 日 00:00:00 UTC 到目前为止的秒数
%S : 秒(00..61)
%T : 直接显示时间 (24 小时制)
%X : 相当于 %H:%M:%S
%Z : 显示时区 %a : 星期几 (Sun..Sat)
%A : 星期几 (Sunday..Saturday)
%b : 月份 (Jan..Dec)
%B : 月份 (January..December)
%c : 直接显示日期与时间
%d : 日 (01..31)
%D : 直接显示日期 (mm/dd/yy)
%h : 同 %b
%j : 一年中的第几天 (001..366)
%m : 月份 (01..12)
%U : 一年中的第几周 (00..53) (以 Sunday 为一周的第一天的情形)
%w : 一周中的第几天 (0..6)
%W : 一年中的第几周 (00..53) (以 Monday 为一周的第一天的情形)
%x : 直接显示日期 (mm/dd/yy)
%y : 年份的最后两位数字 (00.99)
%Y : 完整年份 (0000..9999)

比如:

# date +%Y

2017

1.2设置系统时间

格式:date -s 时间

date -s 20170815     #设置年月日

date -s 00:00:00       #设置时分秒

# 设置年月日时分秒

date -s  "2017-08-15 00:00:00”

date -s  ”20170815 00:00:00”

date -s  ”00:00:00 2008-05-23”

date -s  “00:00:00 20170815”

1.3运算

计算到该时间点的秒数,默认起点时间是1970-01-01 00:00:00

# time=$(date +%s -d '2017-12-17 20:06:01')

# echo $time

1513512361

1.4帮助信息

# date --help

BusyBox v1.20.2 (2015-02-25 14:32:43 CST)multi-call binary.

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

[-s,--set] TIME Set time to TIME

-u,--utc        Work in UTC (don'tconvert to local time)

-R,--rfc-2822   Output RFC-2822compliant date string

-I[SPEC]        Output ISO-8601compliant date string

SPEC='date' (default)for date only,

'hours', 'minutes', or'seconds' for date and

time to the indicated precision

-r,--reference FILE     Displaylast modification time of FILE

-d,--date TIME  Display TIME, not'now'

-D FMT          Use FMT for -dTIME conversion

Recognized TIME formats:

hh:mm[:ss]

[YYYY.]MM.DD-hh:mm[:ss]

YYYY-MM-DD hh:mm[:ss]

[[[[[YY]YY]MM]DD]hh]mm[.ss]

'date TIME' form accepts MMDDhhmm[[YY]YY][.ss] instead

找了很久可用。

【Linux 系统时间设置,date 和hwclock】相关推荐

  1. hwclock设置日期_linux中时间设置date、hwclock、clock

    Windows时钟大家可能十分熟悉了,Linux时钟在概念上类似Windows时钟显示当前系统时间,但在时钟分类和设置上却和Windows大相径庭.和Windows不同的是,Linux将时钟分为系统时 ...

  2. 嵌入式Linux系统时间设置

    Linux系统的很多功能都需要读取时间为基础.比如:日志系统需要时间戳以记录log,为后期的问题排查提供支撑:cron服务需要正确的时间设置以支撑周期性.特定时间点执行某个任务:等等.大多数Linux ...

  3. linux锁定系统时间设置,设置linux系统时间的方法

    尝试了好多,都是因为权限问题失败,但是总结出了几种思路: 1 通过linux指令进行设置: date -s "20091112 18:30:50" &&hwcloc ...

  4. linux系统运行hwclock报错,linux系统时间和硬件时钟问题(date和hwclock)

    总结一下hwclock,这个容易晕: 1)/etc/sysconfig/clock 文件,只对 hwclock 命令有效,且只在系统启动和关闭的时候才有用(修改了其中的 UTC=true 到 UTC= ...

  5. linux锁定系统时间设置,Linux时间设置系统时间、硬件时间和时间服务

    Linux有两个时间,一个是系统时间,一个是RTC时间(也叫硬件时间). Linux系统启动时,会自动获取硬件时间,设置为系统时间. 一.查询系统时间: 查询系统时间:date 查询/设置硬件时间: ...

  6. linux日志时间和date时间不一致,centos7系统日志时间与系统时间相差8小时

    场景:当我们修改完系统时间的时区后,我们去查看我们的系统日志的时间发现时区还是在之前的系统时间时区. [root@vp-n ~]# ls -l /etc/localtime lrwxrwxrwx 1 ...

  7. Linux系统时间的设置

    在Linux下,默认情况下,系统时间和硬件时间并不会自动同步.在Linux运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰.硬件时间的运行,是靠BIOS电池来维持,而系统时间,是用CPU Ti ...

  8. java linux 时区_java同步/设置Linux系统时间

    java设置/同步Linux系统时间 在网上看了很多,试了很多,不知道是他们的环境不同还是啥原因,很少成功 下面我就把我的测试成功的代码贴出来,让同行们少走弯路,如果实验不成功,可以给我留言 我帮助你 ...

  9. linux系统无法设置时间,linux设置系统时间

    设置系统时间 -         date命令:显示系统的时间,可以在直接输入"date"命令来查看系统的时间 -           date+%y/%m/%d -        ...

最新文章

  1. Java 8 失宠!开发人员向 Java 11 转移...
  2. iOS - Socket 网络套接字
  3. 传染病控制(洛谷 1041 WA 90)
  4. MariaDB配置慢日志
  5. 前端学习(2156):uglifyjswebpackplugin的使用
  6. python 英语培训_英语学习与Python编程语言学习相辅相成(三十一)
  7. C++, “包含类的头文件”还是“对类进行前置声明”?
  8. 【LOJ】#6391. 「THUPC2018」淘米神的树 / Tommy
  9. 抖音短视频数据分析报告工具
  10. 风雨三十载,华为的沉浮往事
  11. 教你一步步实现一个虚拟摇杆
  12. 流水线激光打标视觉定位系统
  13. STM8停产,新唐的N76E003 pin对pin替换STM8S003F3P6
  14. Hashmap实现原理及hash冲突(碰撞)解决方法
  15. Microsoft Teams 报错:We‘re sorry-we‘ve run into an issue.
  16. 为什么全网通手机联通显示无服务器,手机卡无服务怎么回事
  17. Scikit入门指南
  18. 解决PyCharm安装tensorflow-cpu2.1.0导入失败问题
  19. JAVA计算机毕业设计科院垃圾分类系统部署+源码+数据库+系统+lw文档
  20. 安卓App生成签名证书,uniapp生成自有证书打包

热门文章

  1. linux下使用ramdisk
  2. 中国橡胶防焦剂CTP行业研究与预测报告(2022版)
  3. 在vue2使用百度脑图的kityminder-core进行二次开发思维导图。节点收起时显示子节点的数量
  4. 单机存储引擎到mysql的思考一
  5. vs运行为什么找不到服务器,关于c#:VS找不到该服务器上的工作空间
  6. Python学习教程:手把手教你搭建自己的量化分析数据库
  7. 计算机成为冷门专业,一文全面了解“冷门专业”!是“冷门”还是“潜力股”?...
  8. Java中byte转int的方法
  9. 2022年5月29日进城记
  10. win xp sp3系统如何安装微信. 2023-03-01