Linux下RTC设备驱动?

Linux下RTC设备驱动?,第1张

RTC(实时钟)借助电池供电,在系统掉电的情况下依然可以正常计时。它通常还具有产生周期性中断以及闹钟(Alarm〉中断的能力,是一种典型的字符设备。作为一种字符设备驱动,RTC需要有file_operations中接口函数的实现,如open () 、release () 、read () 、poll () 、ioctl ()等,而典型的IOCTL包括RTC_SET_TIME、RTC_ALM_READ、RTC_ALM_SET、RTC_IRQP_SET、RTC_IRQP_READ等,这些对于所有的RTC是通用的,只有底层的具体实现是与设备相关的。因此,drivers/rtc/tc-dev.c实现了RTC驱动通用的字符设备驱动层,它实现了file_opearations的成员函数以及一些通用的关于RTC的控制代码,并向底层导出rtc_device_register () 、rtc_device_unregister ()以注册和注销RTC导出rtc_class_ops结构体以描述底层的RTC硬件 *** 作。这个RTC通用层实现的结果是,底层的RTC驱动不再需要关心RTC作为字符设备驱动的具体实现,也无需关心一些通用的RTC控制逻辑。

装完win7和Linux双系统后,进入Linux后再进入Windows,你会惊奇的发现时间不对了,差了有8个小时。 导致这样的原因是Winows和 Linux 对硬件时间的处理方法不同,Windows将硬件时间作为本地时间,而Linux则将硬件时间处理为UTC时间。因此在中国UTC+8时区的情况下使用 Windows 和 Linux 会有八个小时的差异。 解决方案: Linux命令: hwclock可以查看硬件时间, timedatectl可以查看本地时间、UTC时间、时区、是否开启时间同步等信息。 思路: 将两个系统对硬件时间的处理统一化,统一将硬件时间做为本地时间。 Windows时间不做处理,在Linux下处理时间 timedatectl set-local-rtc命令可以将硬件时间 设置为本地时间或UTC时间 如果经过上述设置之后时间显示不正确了,可以通过下列命令同步时间。

1 TIMEDATECTL命令 该命令是作为systemd系统和服务管理器的一部分分发的工具,可以用它来查看和更改系统时钟的配置,包括更改当前的日期和时间、设置时区以及可以激活与远端服务器系统时钟的自动同步,是红帽企业版 7 版本新增的命令。 1.1 展示当前日期和时间 可以使用timedatectl命令来展示当前日期和时间,并且有系统和硬件时钟的配置的详细信息。 [root@strong ~]# timedatectl Local time: Sat 2019-09-21 15:02:27 CST Universal time: Sat 2019-09-21 07:02:27 UTC RTC time: Sat 2019-09-21 07:02:27 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a 1.2 更改当前时间 更改当前时间,命令格式为:timedatectl set-time HH:MI:SS。 该命令同时更改系统时间和硬件时钟,执行结果与使用命令date --set 和hwclock --systohc的效果相同。 [root@strong ~]# timedatectl set-time 20:00:00 [root@strong ~]# timedatectl Local time: Sat 2019-09-21 20:00:04 CST Universal time: Sat 2019-09-21 12:00:04 UTC RTC time: Sat 2019-09-21 12:00:05 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a [root@strong ~]# timedatectl set-time 2019-09-15 [root@strong ~]# timedatectl Local time: Sun 2019-09-15 00:00:03 CST Universal time: Sat 2019-09-14 16:00:03 UTC RTC time: Sat 2019-09-14 16:00:03 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: no NTP synchronized: no RTC in local TZ: no DST active: n/a 仅仅更改日期,时间会变为00:00:00,故更改日期时需把对应的时间加上,例如:timedatectl set-time "2019-09-21 15:16:00"。 1.4 更改时区 1.4.1 列出所有时区 [root@strong ~]# timedatectl list-timezones 1.4.2 更改时区 [root@strong ~]# timedatectl set-timezone Asia/Shanghai 2 DATE命令 该命令在所有Linux系统都可用,用于设置和查看当前日期和时间,常用于脚本中以格式化的形式用于展示系统时间的详细信息。 2.1 展示当前日期和时间 1)不带任何格式展示 [root@strong ~]# date Sat Sep 21 15:24:57 CST 2019 默认展示的是本地时间,以UTC的方式展示,需使用date --utc或date -u。 [root@strong ~]# date --utc Sat Sep 21 07:25:50 UTC 2019 2)格式化展示 客制化日期和时间的展示格式,使用命令:date +"格式"。 常用的格式为: 控制格式 描述 %H 以HH格式展示小时; %M 以MM格式展示分钟; %S 以SS格式展示秒; %d 以DD格式展示天数; %m 以MM格式展示月; %Y 以YYYY格式展示年; %Z 时区; %F 以YYYY-MM-DD格式展示日期,和%Y-%m-%d等价; %T 以HH:MM:SS格式展示时间,和%H:%M:%S等价; [root@strong ~]# date Sat Sep 21 15:37:18 CST 2019 [root@strong ~]# date +"%Y-%m-%d %H:%M:%S" 2019-09-21 15:38:00 2.2 更改当前时间 更改当前时间,命令格式为:date --set HH:MM:SS。 [root@strong ~]# date --set 15:40:20 Sat Sep 21 15:40:20 CST 2019 2.3 更改当前日期 更改当前日期,命令格式为:date --set YYYY-MM-DD。 [root@strong ~]# date --set 2019-09-25 Wed Sep 25 00:00:00 CST 2019 仅仅更改日期,时间会变为00:00:00,故更改日期时需把对应的时间加上,例如: [root@strong ~]# date --set "2019-09-21 15:42:35" Sat Sep 21 15:42:35 CST 2019。 3 CLOCK命令 该命令是用于访问硬件时钟的工具,也称为Real Time Clock(RTC),对应的设置保存在/etc/adjtime文件中。硬件时钟独立于 *** 作系统,即使系统关闭,它仍然工作,用于从硬件时钟展示时间。 3.1 展示当前日期和时间 [root@strong ~]# hwclock Sat 21 Sep 2019 03:51:24 PM CST -0.368709 seconds 3.2 设置日期和时间 设置日期和时间的命令为:hwclock --set --date "dd mmm yyyy HH:MM" [root@strong ~]# hwclock --set --date "21 Sep 2019 16:02:25" [root@strong ~]# hwclock Sat 21 Sep 2019 04:02:35 PM CST -0.342764 seconds 3.3 同步日期和时间 可以使用hwclock命令在硬件时钟和当前系统时间直接互相同步。 3.3.1 系统时间同步到硬件时钟 [root@strong ~]# hwclock --systohc 3.3.2 硬件时钟同步到系统时间 [root@strong ~]# hwclock --hctosys


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7248319.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存