linux之修改时钟(rtc)

合集下载

如何设置gec2410开发板系统时间及硬件时间(RTC)

如何设置gec2410开发板系统时间及硬件时间(RTC)

如何设置gec2410开发板系统时间及硬件时间(RTC)如何设置gec2410开发板系统时间及硬件时间(RTC)2008-06-29 21:27 483人阅读评论(0) 收藏举报之前使用开发板时发现每次开机后,系统的时间都恢复到初始状态1969年,因为QT界面要显示采集数据的时间,没办法只能自己去解决这个问题,这两天总算把问题搞定了。

一、先说一下时钟的概念,时钟包括硬件时钟和系统时钟,系统时钟就是linux系统显示的时间,用命令date可以显示当前系统时间;硬件时钟就是硬件自身的时间了。

它们两者没有关系的,但是可以通过命令设置系统时钟和硬件设置,让它们同步。

在linux系统设置系统时钟用命令date,格式为:date ************.10,表示系统时间设置为2008年6月29日20时50分10秒。

硬件时钟RTC时间是通过hwclock命令来设置的,比如说硬件时间要设置为2008年6月29日20时50分10秒,则应该先用date ************.10,然后用命令:hwclock -w,这样RTC时间就跟系统时间一致了。

二、确保RTC在开发板断电后能继续工作。

原来的gec2410开发板的底层板电路有问题,RTC无法工作,导致开机时RTC的时间也回到了1969年(用hwclock命令查看硬件时间),后来发现3.3v的电池通过两个电阻跟RTC的VDDRTC(为RTC提供电压的引脚)相连后电压不要1v,而RTC工作电压为1.8v左右,前天去了广嵌,朱工把D8电阻短路掉,D9电阻换成一个发光二级管(压降为1.5v左右),这样开发板断电后就可以用3.3v的电池供电了。

三、让系统时间和RTC时间同步。

因为每次开机后系统的时间都是系统原来的时间,比如说1969年1月1日1时1分1秒,为了让系统时间和RTC时间同步,可以在文件系统中etc/init.d/rcS添加如下命令:/sbin/hwclock -s,这样每次开机时系统就会读取RTC的时间,系统时间就与RTC时间同步了。

时间篇之linux系统时间和RTC时间

时间篇之linux系统时间和RTC时间

时间篇之linux系统时间和RTC时间⼀、linux系统下包含两个时间:系统时间(刚启动时读取的是rtc时间)和RTC时间。

⼀般情况下都会选择芯⽚上最⾼精度的定时器作为系统时间的定时基准,以避免在系统运⾏较长时间后出现⼤的时间偏移。

特点是掉电后不保存。

所以⼀旦你重启机器后,那么系统需要重新从RTC上重新获取时间,保存到系统内核⽂件中。

RTC(real_time clock)驱动程序,可以在E:\linux内核\linux-2.6.0\linux-2.6.0\drivers\char\rtc.c中找到。

设备接⼝就是 /dev/rtc, 他负责跟rtc打交道,并读取rtc中维护的时间.它是⼀个从系统定时器中独⽴出来的虚拟设备,⽤于设置系统时钟,提供报警器或周期性的定时器.那么系统时间⼀直运⾏吗?显然在操作系统关闭或重启期间,服务器宕机期间,整个服务器的时间就依赖于RTC芯⽚。

从这我们看出linux系统时间和RTC时间是两套独⽴的计时体系,但它们之间⼜是相互依存的:1)刚安装操作系统后,若在安装过程不设置系统时间,那么默认的系统时间就是从服务器的RTC芯⽚中获取当前的硬件时间;2)在linux操作系统中,⼀旦修改系统时间后,⼜重启或关闭Linux系统,则OS通常会将系统时间更新到RTC;3)在操作系统再次启动的时候,Linux OS则会再次从RTC中获取当前的时间。

服务器异常下电后,待操作系统重新启动后,发现系统时间发⽣了跳变?其原因通常是:修改了操作系统时间,在服务器异常下电后,操作系统并未及时将修改后的时间更新到RTC,导致操作系统重新启动后,就会从RTC芯⽚中加载了之前“⽼”的时间,从⽽在操作系统层⾯体现为“时间跳变”⼆、关于jiffies⼀次中断时间间隔叫⼀个tick,即每个触发周期的时间叫做tick,⼀秒内时钟中断的次数(每个时间间隔就是⼀次)等于Hzhz别名就是tick rate(HZ)linux系统查看hz:[root@k3master ~]# cat /boot/config-`uname -r` | grep 'CONFIG_HZ='CONFIG_HZ=10001hz就是每秒1000次中断每次时钟中断处理程序即每发⽣⼀次tick都会增加jiffies该变量的值,jiffies⼀秒内增加的值也就是Hz(频率),⽐如:linux下默认是 1000次时钟中断次数/秒系统运⾏时间以秒为单位,换算⽅法等于jiffies/Hz。

Linux系统如何更改时间时区

Linux系统如何更改时间时区

Linux系统如何更改时间时区对于许多与系统相关的任务和进程,使⽤正确的时区是必不可少的。

例如,cron守护进程使⽤系统的时区执⾏cron作业,⽇志⽂件中的时间戳基于同⼀系统的时区。

环境8检查现在的时区timedatectl是⼀个⾏实⽤程序,允许您查看和更改系统的时间和⽇期。

[root@localhost ~]# timedatectlLocal time: Tue 2020-03-31 16:35:23 CSTUniversal time: Tue 2020-03-31 08:35:23 UTCRTC time: Tue 2020-03-31 08:35:23Time zone: Asia/Shanghai (CST, +0800)System clock synchronized: yesNTP service: activeRTC in local TZ: no更改时区在更改时区之前,您需要找出要使⽤的时区名称。

要列出所有可⽤时区,请使⽤下⾯的:[root@localhost ~]# timedatectl list-timezones…Asia/SamarkandAsia/SeoulAsia/ShanghaiAsia/SingaporeAsia/Srednekolymsk…然后使⽤set-timezone选项更改时区,⽐如更改为Europe/Berlin:[root@localhost ~]# timedatectl set-timezone Europe/Berlin使⽤创建链接的⽅式更改时区如果运⾏的是旧版本的Centos,⽐如Centos6之前的版本,并且系统上不存在timedatectl命令,则可以通过将/etc/localtime符号链接到/usr/share/zoneinfo⽬录中的时区⽂件来更改时区。

查看⼀下/usr/share/zoninfo下⾯的时区⽂件,[root@localhost ~]# ls /usr/share/zoneinfo/[root@localhost ~]# ls /usr/share/zoneinfo/Asia/[root@localhost ~]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime[root@localhost ~]# dateTue Mar 31 16:53:59 CST 2020可以看到已经切换到了CST中国标准时间总结在本⽂中,使⽤了两种⽅式修改时区。

linux 系统时钟的时钟源

linux 系统时钟的时钟源

linux 系统时钟的时钟源
Linux 操作系统的系统时钟源通常来自硬件时钟(Real Time Clock,RTC)和内核软件时钟。

以下是这两个时钟源的简要说明:
1. 硬件时钟(RTC):
- 硬件时钟芯片:许多计算机系统配备了一个硬件时钟芯片,通常称为 RTC。

该芯片在计算机关闭时仍然保持运行,以提供计算机启动时的时间信息。

- CMOS 存储器: RTC 通常集成在计算机的 CMOS 存储器中,该存储器负责存储基本的系统设置和时钟信息。

2. 内核软件时钟:
- 系统时钟:内核维护一个系统时钟,它是在系统启动时从硬件时钟初始化的。

系统时钟通常以固定的时间间隔触发中断,以便进行时钟维护和系统调度。

- 软件时钟源: Linux 内核还可以使用其他软件时钟源,例如TSC(时间戳计数器)来提供高分辨率的时钟。

3. NTP 同步:
- 网络时间协议(NTP): Linux 系统可以通过 NTP 与外部时间服务器同步,以确保系统时钟与全球时间同步。

NTP 使系统能够校准其时钟并持续跟踪时间的变化。

在 Linux 中,可以使用以下命令来查看系统时钟的状态和相关信息:
# 查看硬件时钟的状态
hwclock
# 查看系统时钟的状态
date
# 查看时钟同步状态(如果使用了 NTP)
ntpq -p
值得注意的是,硬件时钟通常是持久的,即使系统关机也能保存时间信息。

而系统时钟在系统关机时会被重置,重新从硬件时钟同步时间。

时钟同步对于许多系统任务和应用程序来说至关重要,因此保持时钟的准确性是操作系统的一个重要功能。

如何修改linux时间?校正linux系统的时间

如何修改linux时间?校正linux系统的时间

如何修改linux时间?校正linux系统的时间第⼀步:通过xshell远程连接到linux系统第⼆步:输⼊ tzselect第三步:选择所在的州,中国⼈请选择 5 ,亚洲第四步:选择你所在的国家,中国⼈请选择9,中国第五步:选择⼀个时区,⼤部分⼈选择北京时间插⼊完整修改过程:1 [root@localhost ~]# tzselect2 Please identify a location so that time zone rules can be set correctly.3 Please select a continent or ocean.4 1) Africa5 2) Americas6 3) Antarctica7 4) Arctic Ocean8 5) Asia9 6) Atlantic Ocean10 7) Australia11 8) Europe12 9) Indian Ocean13 10) Pacific Ocean14 11) none - I want to specify the time zone using the Posix TZ format. 15#? 516 Please select a country.17 1) Afghanistan 18) Israel 35) Palestine18 2) Armenia 19) Japan 36) Philippines19 3) Azerbaijan 20) Jordan 37) Qatar20 4) Bahrain 21) Kazakhstan 38) Russia21 5) Bangladesh 22) Korea (North) 39) Saudi Arabia22 6) Bhutan 23) Korea (South) 40) Singapore23 7) Brunei 24) Kuwait 41) Sri Lanka24 8) Cambodia 25) Kyrgyzstan 42) Syria25 9) China 26) Laos 43) Taiwan26 10) Cyprus 27) Lebanon 44) Tajikistan27 11) East Timor 28) Macau 45) Thailand28 12) Georgia 29) Malaysia 46) Turkmenistan29 13) Hong Kong 30) Mongolia 47) United Arab Emirates30 14) India 31) Myanmar (Burma) 48) Uzbekistan31 15) Indonesia 32) Nepal 49) Vietnam32 16) Iran 33) Oman 50) Yemen33 17) Iraq 34) Pakistan34#? 935 Please select one of the following time zone regions.36 1) east China - Beijing, Guangdong, Shanghai, etc.37 2) Heilongjiang (except Mohe), Jilin38 3) central China - Sichuan, Yunnan, Guangxi, Shaanxi, Guizhou, etc.39 4) most of Tibet & Xinjiang40 5) west Tibet & Xinjiang41#? 14243 The following information has been given:4445 China46 east China - Beijing, Guangdong, Shanghai, etc.4748 Therefore TZ='Asia/Shanghai' will be used.49 Local time is now: Sat Aug 6 17:55:56 CST 2016.50 Universal Time is now: Sat Aug 6 09:55:56 UTC 2016.51 Is the above information OK?52 1) Yes53 2) No54#? 15556 You can make this change permanent for yourself by appending the line57 TZ='Asia/Shanghai'; export TZ58 to the file '.profile'in your home directory; then log out and log in again. 5960 Here is that TZ value again, this time on standard output so that you61 can use the /usr/bin/tzselect command in shell scripts:62 Asia/Shanghai63 [root@localhost ~]#64 [root@localhost ~]#。

linux 的date命令及系统时间设置

linux 的date命令及系统时间设置

linux 的date命令及系统时间设置Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。

系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置。

当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。

Linux中的所有命令(包括函数)都是采用的系统时钟设置。

在Linux中,用于时钟查看和设置的命令主要有date、hwclock。

1、date名称 : date使用权限 : 所有使用者使用方式 :date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]说明 :date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下 :时间方面 :% : 印出 %%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-60)%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)若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数参数 :-d datestr : 显示 datestr 中所设定的时间 (非系统时间)--help : 显示辅助讯息-s datestr : 将系统时间设为 datestr 中所设定的时间-u : 显示目前的格林威治时间--version : 显示版本编号例子 :显示时间后跳行,再显示目前日期: #date '+%T%n%D'显示月份与日数: date '+%B %d'显示日期与设定时间(12:34:56): #date --date '12:34:56'注意 :当你不希望出现无意义的 0 时(比如说 1999/03/07),则可以在标记中插入 - 符号,比如说 date '+%-H:%-M:%-S' 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4。

Linux系统时间与RTC时间【转】

Linux系统时间与RTC时间【转】

Linux系统时间与RTC时间【转】Linux的RTC驱动相对还是⽐较简单的,可以将它作为⼀个普通的字符型设备,或者⼀个misc设备,也可以是⼀个平台设备,这都没有关系,主要还是对rtc_ops这个⽂件操作结构体中的成员填充,这⾥主要涉及到两个⽅⾯⽐较重要:1. 在Linux中有硬件时钟与系统时钟等两种时钟。

硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画⾯设定的时钟。

系统时钟则是指kernel中的时钟。

当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独⽴运作。

所有Linu 系统时钟的设定就是我们常⽤的date命令,⽽我们写的RTC驱动就是为硬件时钟服务的,它有属于⾃⼰的命令hwclock,因此使⽤date命令是不可能调⽤到我们的驱动的(在这点上开始把我郁闷到了,写完驱动之后,傻傻的⽤date指令来测试,当然hwclock –r 显⽰硬件时钟与⽇期hwclock –s 将系统时钟调整为与⽬前的硬件时钟⼀致。

hwclock –w 将硬件时钟调整为与⽬前的系统时钟⼀致。

2. 第⼆点就是内核空间和⽤户空间的交互,在系统启动结束,我们实际是处在⽤户态,因此我们使⽤指令输⼊的内容也是在⽤户态,⽽我们的驱动是在内核态的,内核态和⽤户态是互相不可见的,因此我们需要特殊的函数来实现这两种形态的交互,copy_from_user(从⽤户态到内核态)copy_to_user (从内核态到⽤户态)当然这两个函数需要我们在内核驱动中实现。

RTC最基本的两个命令就是设置时间,读取时间。

设置时间——设置时间会调⽤系统默认的RTC_SET_TIME,很显然就是处在⽤户态的⽤户将⾃⼰所要设置的时间信息传递给内核态,case RTC_SET_TIME:{struct rtc_time rtc_tm;if (copy_from_user(&rtc_tm, (struct rtc_time*)arg, sizeof(struct rtc_time)))return -EFAULT;sep4020_rtc_settime(&rtc_tm);//把⽤户态得到的信息传递给设置时间这个函数return0;}读取时间——设置时间会调⽤系统默认的RTC_RD_TIME,很显然就是需要通过内核态的驱动将芯⽚时钟取出,并传递给⽤户态case RTC_RD_TIME: /* Read the time/date from RTC */{sep4020_rtc_gettime(&septime);//通过驱动的读函数读取芯⽚时钟copy_to_user((void *)arg, &septime, sizeof septime);//传递给⽤户态}--------------------------------------------------------------------------------------------------------------------⾸先搞清楚RTC在kernel内的作⽤:linux系统有两个时钟:⼀个是由主板电池驱动的“Real Time Clock”也叫做RTC或者叫CMOS时钟,硬件时钟。

linux 时间校准原理

linux 时间校准原理

linux 时间校准原理
在Linux操作系统中,时间校准的原理涉及到时钟源、时钟频率和时钟同步。

时钟源:Linux系统中,有多种时钟源供选择,例如系统时钟(System Clock)、实时时钟(Real-Time Clock)和高精度事件计数器(High Precision Event Timer)。

每个时钟源都有不同的特点和用途,选择合适的时钟源可以满足不同的时间校准需求。

时钟频率:时钟频率指的是时钟信号的周期,可以用来计算时间的精度。

不同的时钟源有不同的时钟频率,可以根据实际需要进行配置和调整。

时钟同步:为了保证系统中不同设备和服务的时间一致性,在Linux系统中需要进行时钟同步。

常用的时钟同步协议包括NTP(Network Time Protocol)和PTP(Precision Time Protocol)。

NTP通过网络协议进行时钟校准,可以实现准确的时间同步;PTP主要用于高精度时钟校准,适用于需要毫秒级以内的时钟同步精度。

根据时钟源的选择和配置,Linux系统可以通过时钟同步协议进行时间校准,确保系统中的时间保持准确和一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux下的时钟
=========================
第一部分:时间设置
=========================
我们一般使用“date -s”命令来修改系统时间(这里说的是系统时间,是linux由操作系统维护的)
将日期时间设置成2014年8月7日下午3点5分0秒可以用
#date -s "08/07/2014 15:05:00"
#date -s "2014-08-07 15:05:00"
这里的格式是"MM/DD/YYYY hh:mm:ss"
或者
#date 080715052014.00
这里的格式是MMDDhhmmYYYY.ss (月日时分年.秒)
在系统启动时,Linux操作系统将时间从CMOS中读到系统时间变量中,以后修改时间通过修改系统时间实现。

为了保持系统时间与CMOS时间的一致性,Linux每隔一段时间会将系统时间写入CMOS。

由于该同步是每隔一段时间(大约是11分钟)进行的,在我们执行date -s后,如果马上重起机器,修改时间就有可能没有被写入CMOS,这就是问题的原因。

如果要确保修改生效可以执行如下命令。

#hwclock -w
这个命令强制把系统时间写入CMOS,(等同于hwclock --systohc)
linux提供两类的rtc兼容性很高的用户空间系统调用接口,如下所示:
(1)/dev/rtc ... 这个RTC适合pc体系的系统,而并不适合非x86体系的系统
(2)/dev/rtc0,/dev/rtc1 ... 他们依赖一种架构,这种架构在所有的系统上被RTC 芯片广泛的支持。

程序员必须知道,PC/AT的功能不总是有效,其他的系统可能会有另外的实现。

这种情况下,如果在相同的系统结构上使用同样的RTC API,那么硬件会有不同的反应。

例如,不是每一个RTC都提供IRQ,所以这些不能处理报警中断;标准的PC系统RTC只能处理未来24小时以内的闹钟,而其他系统的RTC可能处理未来一个世纪的任何时间。

在文件系统修改将rtc0改成rtc1
Vi etc/udev/rules.d/local.conf
或者在启动开发板下
设置系统时间
date -s "2014-08-07 15:05:00"
设置rtc1时间
hwclock -w -f /dev/rtc1 写入Hwclock -r -f /dev/rtc1 读取。

相关文档
最新文档