导航:首页 > 操作系统 > linux硬件时钟

linux硬件时钟

发布时间:2022-12-10 14:24:05

‘壹’ 求助,刚开始学linux,怎么把硬件时钟心为24小时制

先用date命令设置成24小时。然后再同步就可以了。

‘贰’ Linux系统下的NTP配置

第一步,选择最好的NTP服务地址

具体命令为ntpdate -q IP地址或域名

广东地区NTP优选结果如下:

①time4.cloud.tencent.com

②server time.asia.apple.com

③server cn.ntp.org.cn

④server ntp.aliyun.com

⑤server cn.pool.ntp.org

检查BIOS主板时间的命令

hwclock -r

NTP服务启停命令

sudo systemctl start/stop ntpd

检查查看ntp服务器有无和上层ntp连通

ntpstat

查看ntp服务器与上层ntp的状态

ntpq -pn

===server选项格式===

server host  [ key n ] [ version n ] [ prefer ] [ mode n ] [ minpoll n ] [ maxpoll n ] [ iburst ]

其中host是上层NTP服务器的IP地址或域名,随后所跟的参数解释如下所示:

◆ key: 表示所有发往服务器的报文包含有秘钥加密的认证信息,n是32位的整数,表示秘钥号。

◆ version: 表示发往上层服务器的报文使用的版本号,n默认是3,可以是1或者2。

◆ prefer: 如果有多个server选项,具有该参数的服务器优先使用。

◆ mode: 指定数据报文mode字段的值。

◆ minpoll: 指定与查询该服务器的最小时间间隔为2的n次方秒,n默认为6,范围为4-14。

◆ maxpoll:  指定与查询该服务器的最大时间间隔为2的n次方秒,n默认为10,范围为4-14。

◆ iburst: 当初始同步请求时,采用突发方式接连发送8个报文,时间间隔为2秒。

===同步硬件时钟===

ntp服务,默认只会同步系统时间。

如果想要让ntp同时同步硬件时间,可以设置/etc/sysconfig/ntpd文件,

在/etc/sysconfig/ntpd文件中,添加【SYNC_HWCLOCK=yes】这样,就可以让硬件时间与系统时间一起同步。

允许BIOS与系统时间同步,也可以通过hwclock -w 命令。

hwclock命令用来查询和设置硬件时钟。

hwclock -r 读取并打印硬件时钟

hwclock -s 将硬件时钟同步到系统时钟

hwclock -w  将系统时钟同步到硬件时钟

系统时钟与硬件时钟

在Linux中有硬件时钟与系统时钟等两种时钟。硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟。系统时钟则是指kernel中的时钟。当Linux启动时,系统时钟会去读取硬件时钟的设定,之后系统时钟即独立运作。所有Linux相关指令与函数都是读取系统时钟的设定。

参考文档:

Linux服务器NTP客户端配置——https://www.cnblogs.com/paul8339/p/10059364.html

NTP服务、客户端配置详解——https://blog.51cto.com/u_11392081/1784080

‘叁’ linux的硬件时钟

什么是硬件时钟?
    记录在CMOS中的时钟,和系统是没有关系的。是靠纽扣电池来保存和计数的。硬件时钟能记录的信息有且仅有一个时间值(注意,和时区没有一毛钱关系)。所以,当我们设置硬件时钟的时候,仅仅是设置了一个数值。当我们读取硬件时钟的时候,也仅仅是一个数值。
    每次操作系统启动的时候,都会读取这个数值,然后同步到系统时钟中。但是光读取这个数值,对操作系统而言毫无意义(它不知道,你这个数值具体是哪个时区下的时间,自然就无法同步到系统时钟)
    那么怎么知道硬件时钟记录的时间是哪个时区的呢(local or utc)?只能是人为指定了(系统启动的时候,自己指定。我认为系统自己指定也是人为指定的一种吧),我们下面看下例子(一个读,一个写),看看怎么解释(网上很多解释我觉的不靠谱)

这里哪里能看出人为指定的时区是什么呢?
缺省的就是这个文件/etc/adjtime指定的(很多人说centos 6中是/etc/sysconfig/clock这个文件。不解释了,忘记这个文件吧)
看下/etc/adjtime的内容:

这里是UTC,所以上面的读写含义分别是
    读取出来的这个硬件时间是UTC的,直接同步到系统时间(我认为系统时间存的是UTC时间)。如果读取出来的时间是LOCAL的,是不能直接同步系统时间的。先找到系统的时区文件/etc/localtime,根据当前时区计算出UTC时间,再同步到系统时间(还有一点,这里说一下, hwclock读取的时候,最后都是以local时间显示出来的,所以可能还有一层转换)
    把"2015-08-14 16:45:05"这个时间直接写入硬件时钟,同时更新/etc/adjtime的内容(方便下一次读的时候,找到正确的时区)

那怎么覆盖/etc/adjtime的内容呢?
    在读写的时候可以显示指定,例如hwclock --local,hwclock --utc(如果不显示指定,则使用/etc/adjtime的值)

‘肆’ linux中的时间是哪个时区的

1、more /etc/sysconfig/clock
ZONE="Asia/Shanghai"
2、GMT + 8 = UTC + 8 = CST ,我们的linux系统时间和计算机硬件时间应该是cst时间,上海时区。
3、安装CentOS/RHEL时候,应当取消”系统时钟使用UTC时间”这个选项,如果忘了取消,系统时钟会差8小时
#vi /etc/sysconfig/clock
把UTC=true 修改为 UTC=false,保存后重启即可。
4、#ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
或者
#cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
5、系统时钟
date -R
6、zmp – This utility prints the current time and date in the specified time zone. Example:
# zmp Japan
Japan Tue Feb 28 17:52:18 2017 JST
# zmp Iceland
Iceland Tue Feb 28 08:52:45 2017 GMT
zmp China
China Tue Feb 28 08:53:02 2017 China
7、CST/GMT/UTC/DST缩写
CST China Standard Time UT+8:00
GMT 格林威治标准时间(Greenwich Mean Time,简称G.M.T.)
UTC 世界协调时间UTC比GMT来得更加精准
DST 夏日节约时间:所谓“夏日节约时间”Daylight Saving Time(简称D.S.T.),
RTC 硬件时钟(Real Time Clock,简称RTC),相对应的系统时钟(System Clock)。

‘伍’ linux 嵌入式软硬件时钟 怎么同步

置硬件时间,

开机时Linux会从硬件的rtc的时钟芯片中获取一次硬件时间,然后以此为基础来运行系统时间。
settimeofday 相当于date shell命令,紧紧能设置系统时间。

如果想设置硬件时间,需要一个hwclock -w shell原理的函数来写硬件的rtc。
扒一扒 busybox的 hwclock.c源码(http://www.codeforge.cn/read/97203/hwclock.c__html)
可以知道这么抄写功能源码:

[cpp] view plain
static void write_rtc(time_t t, int utc)
{
int rtc;
struct tm tm;

if (( rtc = open ( "/dev/rtc", O_WRONLY )) < 0 )
{
if (( rtc = open ( "/dev/misc/rtc", O_WRONLY )) < 0 )
bb_perror_msg_and_die ( "Could not access RTC

‘陆’ linux 怎么设置硬件时钟 UTC

一、首先要弄清几个概念:
1. “系统时间”与“硬件时间”
系统时间: 一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。
硬件时间: 主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。

2. “UTC时间”与“本地时间”
UTC时间:Coordinated Universal 8 e2 i( H7 t0 ^/ ^Time 世界协调时间(又称世界标准时间、世界统一时间),在一般精度要求下,它与GMT(Greenwich Mean Time,格林威治标准时间)是一样的,其实也就是说 GMT≈UTC,但 UTC 是以原子钟校准的,更精确。
本地时间:由于处在不同的时区,本地时间一般与UTC是不同的,换算方法就是

本地时间 = UTC + 时区 或 UTC = 本地时间 - 时区
时区东为正,西为负,例如在中国,本地时间都使用北京时间,在linux上显示就是 CST(China Standard Time,中国标准时,注意美国的中部标准时Central Standard Time也缩写为CST,与这里的CST不是一回事!),时区为东八区,也就是 +8 区,所以 CST=UTC+(+8小时) 或 UTC=CST-(+8小时)。
二、设置硬件时钟 UTC
硬件时间 /sbin/hwclock
直接调用 /sbin/hwclock 显示的时间就是 BIOS 中的时间吗?未必!这要看 /etc/sysconfig/clock 中是否启用了UTC,如果启用了UTC(UTC=true),显示的其实是经过时区换算的时间而不是BIOS中真正的时间,如果加上 --localtime 选项,则得到的总是 BIOS 中实际的时间.
[12-01 19:07> ~]# hwclock

2009年12月07日 星期一 14时28分43秒 -0.611463 seconds
[12-01 19:07> ~]# hwclock --utc
2009年12月07日 星期一 14时28分46秒 -0.594189 seconds
[12-01 19:07> ~]# hwclock --localtime
2009年12月07日 星期一 06时28分50秒 -0.063875 seconds
三、最后总结
1)/etc/sysconfig/clock 文件,只对 hwclock 命令有效,且只在系统启动和关闭的时候才有用(修改了其中的 UTC=true 到 UTC=false 的前后,执行 hwclock (--utc, 或 --localtime) 都没有变化,要重启系统后才生效);

2)/etc/rc.d/rc.sysinit 文件,run once at boot time,其中有从硬件时钟同步时间到系统时间的操作;
3)hwclock --localtime 的输出,才是硬件时钟真正的时间。如果输出结果带时区(比如CST),还要看/etc/sysconfig/clock里的UTC参数,如果 UTC=false,那时区有意义;如果 UTC=true,那时区没意义,实际上是UTC时间。
4)在 /etc/sysconfig/clock 中 UTC=false 时,date、hwclock、hwclcok --localtime 输出的时间应该都一致,且此时 hwclock --utc是没有意义的;
5)在 /etc/sysconfig/clock 中 UTC=ture 时,date、hwclock 的输出是一致的,hwclock --localtime 的输出则是UTC时间;
6)如果不想在输出中带时区,则 export LANG=C ,然后再运行 hwclock 就没有什么CST了,免得时区误导你;
7)hwclock --utc 容易理解出错
8)系统关闭时会同步系统时间到硬件时钟,系统启动时会从硬件时钟读取时间更新到系统,这2个步骤都要根据 /etc/sysconfig/clock 文件中UTC的参数来设置时区转换。

‘柒’ Linux 时间同步

在Linux系统中存在两个时钟时间,分别是

硬件时钟是指的在主板上的时钟设备,也就是通常可以在BIOS画面设置的时钟,即使关机状态也可以计算时间。

而系统时钟则是指Kernel中的时钟,其值是由1970年1月1日00:00:00 UTC时间至当前时间所经历的秒数总和。当Linux启动的时候,系统时钟会读取硬件时钟的设定,之后系统时钟独立运作。长时间运行两者可能将会产生误差。另外所有的Linux相关指令都是读取系统时钟指定的,如date。

我们这里讨论的是系统时间。

NTP,网络时间协议,使用 123/udp 端口进行网络时钟同步;NTP 是仍在使用中的最古老的网络传输协议之一(1985 年前开始)。

以前Linux时间同步基本是使用 ntpdate 和 ntpd 这两个工具实现的,但是这两个工具已经很古老了。

【注】ntpdate和ntpd是互斥的,两者不能同时使用。ntpd是步进式平滑的逐渐调整时间,而ntpdate是断点式更新时间。

RHEL/CentOS 7.x 已经将 chrony 作为默认时间同步工具了。

其他Linux (如 ubuntu) 使用 systemd-timesyncd 服务。

chrony 是 RedHat 开发的,它是网络时间协议(NTP)的另一种实现;

RHEL/CentOS 7.x 的默认时间同步工具;

chrony 可以同时做为 ntp 服务的客户端和服务端;安装完后有两个程序 chronyd、chronyc:

chronyd 是一个 daemon 守护进程,chronyc 是用来监控 chronyd 性能和配置参数的命令行工具。

系统版本:CentOS 7.5

chrony_server(relay):10.0.0.4
chrony_client:10.0.0.5

Edit file /etc/chrony.conf

默认已经启动,不需要调整

example:

配置 chrony

edit file: /etc/chrony.conf

再次用chronyc 命令检查,比较它与chronyd server的差异

systemd-timesyncd 是一个用于跨网络同步系统时钟的守护服务。它实现了一个 SNTP 客户端,但更轻量级,更集成systemd。

systemd-timesyncd 启动时会读取 /etc/systemd/timesyncd.conf 配置文件,内容如下:

你可以输入你希望使用的其它时间服务器,比如你自己的本地 NTP 服务器,在 NTP= 行上输入一个以空格分隔的服务器列表。

如果服务器可以直接连接internet,不用修改默认配置;如果在内网,需要单独指定。

在最新的 Ubuntu 版本中,timedatectl 替代了老旧的 ntpdate。默认情况下,timedatectl 在系统启动的时候会立刻同步时间,并在稍后网络连接激活后通过 socket 再次检查一次。

timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。

通过 timedatectl 和 timesyncd 设置的当前时间状态和时间配置,可以使用 timedatectl status 命令来进行确认。

由于 timedatectl 的存在,各发行版已经弃用了 ntpdate,默认不再进行安装。

timedatectl
timedatectl status ,查看时间同步状态;
timedatectl set-ntp true ,开启网络时间同步;

timedatectl set-timezone ZONE ,设置时区。

NTP synchronized: yes 表示时间是同步状态。

查看服务状态以及从哪个ntp server同步时间。

NTP:软件层面实现,成本低。同步精度10ms左右。

PTP:需要网络接口具备在物理层提供时间戳的功能,同步精度优于100ns,局域网的节点需要使用支持PTP功能的交换机。局域网网络接点不支持PTP的话,只能同不到us,而且受网络背景流量影响。

‘捌’ linux设置系统时区命令

‘玖’ 有没有办法可以获取linux开发板的硬件定时器频率

有的。
具体步骤:
1、默认情况下系统节拍率选择100Hz。
2、设置好后在Linux内核源码根目录下的config文件中可见系统节拍率被设置为100Hz。
3、Linux内核会使用CONFIGHZ来设置自己的系统时钟,文件includeasmgenericparamh。
Linux内核使用全局变量jiffies来记录系统从启动以来的系统节拍数,系统启动的时候会将jiffies。

阅读全文

与linux硬件时钟相关的资料

热点内容
dvd光盘存储汉子算法 浏览:757
苹果邮件无法连接服务器地址 浏览:962
phpffmpeg转码 浏览:671
长沙好玩的解压项目 浏览:142
专属学情分析报告是什么app 浏览:564
php工程部署 浏览:833
android全屏透明 浏览:732
阿里云服务器已开通怎么办 浏览:803
光遇为什么登录时服务器已满 浏览:301
PDF分析 浏览:484
h3c光纤全工半全工设置命令 浏览:141
公司法pdf下载 浏览:381
linuxmarkdown 浏览:350
华为手机怎么多选文件夹 浏览:683
如何取消命令方块指令 浏览:349
风翼app为什么进不去了 浏览:778
im4java压缩图片 浏览:362
数据查询网站源码 浏览:150
伊克塞尔文档怎么进行加密 浏览:890
app转账是什么 浏览:163