本文主要是介绍嵌入式设备时间同步(校时),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 二、校时方案
- 三、chrony 介绍和使用
- 3.1 chrony 介绍
- 3.2 chrony 使用示例
- 3.3 chrony.conf
- 3.4 chronyd
- 3.5 chronyc
- 四、gpsd + chrony + pps 介绍和使用
- 4.1 gpsd 介绍
- 4.1.3 gpsd 交叉编译
- 4.2 pps 和 pps-tools 介绍和使用
- x.参考资料
- 五、比较两个设备时间差
- 5.1 date 命令
- 5.2 ntpdate命令
- 5.2.1 使用示例
- 5.2.2 ntpdate 交叉编译
- 5.2.3 chronyd 命令
- 帮助
二、校时方案
ntp校时
三、chrony 介绍和使用
3.1 chrony 介绍
- chrony 官网
- v2.4 chrony.conf
- v2.4 chronyd
- v2.4 chronyc
- FAQ 常见问题
chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器、参考时钟(如GPS接收器)以及使用手表和键盘的手动输入同步。它还可以作为NTPv4(RFC 5905)服务器和对等端操作,为网络中的其他计算机提供时间服务。
通过互联网同步的两台机器之间的典型精度在几毫秒内;在局域网上,精度通常为几十微秒。通过硬件时间戳或硬件参考时钟,亚微秒精度可能是可能的。
chrony中包含两个程序,chronyd是一个可以在启动时启动的守护进程,chronyc是一个命令行界面程序,可以用来监视chronyd的性能,并在其运行时更改各种操作参数。
chrony支持的功能
- NTP校时:作为ntp client向ntp server进行校时。
- PPS(脉冲秒信号)校时:通过连接GPS接收器或其他高精度时钟设备来获取脉冲秒信号。
- RTC(实时时钟)校时:Chrony可以通过与计算机上的实时时钟设备进行通信,将计算机的时钟与实时时钟进行同步。
- NMEA 校时:通过与NMEA设备(如GPS接收器)通信,获取到NMEA数据,并将其用于校正计算机时钟。
- 作为校时服务器:给其他设备校时。
注意:实际使用时根据chrony版本查阅帮助文档,这里使用的版本是chrony 2.4。
3.2 chrony 使用示例
使用步骤:
- 配置好chrony.conf文件
- 启动chronyd
- 选择性设置添加自启动
- chronyc查看状态信息
示例1:ntp 客户端
server ntp1.aliyun.com trust minpoll 2 maxpoll 4 polltarget 30
server 10.234.111.138 trust minpoll 2 maxpoll 4 polltarget 30
makestep 0.1 -1
driftfile /var/lib/chrony/drift
rtcsync
示例1:gps校时,同时作为ntp服务器端给其他设备校时
# gpsd and pps
refclock SHM 0 poll -2 refid GPS precision 1e-1 offset 0.9999 delay 0.2
refclock PPS /dev/pps0 lock NMEA refid PPSmakestep 0.1 -1
driftfile /var/lib/chrony/drift
rtcsync# 作为校时服务器
allow all
local stratum 10
3.3 chrony.conf
示例1-faq
server ntp.local minpoll 2 maxpoll 4 polltarget 30
在NTP服务器配置中,minpoll
和maxpoll
参数用于限制NTP客户端发送时间同步请求的频率。这两个参数控制了NTP客户端在连续的时间同步请求之间等待的最小和最大时间间隔。
minpoll
参数指定了NTP客户端发送时间同步请求的最小时间间隔,单位为2的幂次方的秒。在你的配置中,minpoll
的值为2,表示最小时间间隔为2的2次方,即4秒。
maxpoll
参数指定了NTP客户端发送时间同步请求的最大时间间隔,单位同样为2的幂次方的秒。在你的配置中,maxpoll
的值为4,表示最大时间间隔为2的4次方,即16秒。
polltarget
参数表示NTP客户端向服务器发送请求的时间间隔的目标值,单位为秒。在你的配置中,polltarget
的值为30,表示NTP客户端希望每30秒发送一次时间同步请求。
需要注意的是,polltarget
参数是以秒为单位的,而不是2的幂次方。因此,polltarget
的值并不会超过maxpoll
参数的限制。在你的配置中,即使maxpoll
的值为4(即16秒),polltarget
的值也仍然是30秒。这样设置的目的是为了在时间同步的准确性和服务器负载之间取得一个平衡。
综上所述,NTP客户端的实际时间同步间隔取决于服务器响应和网络延迟等因素,但会受到minpoll
和maxpoll
参数的限制。在你的配置中,NTP客户端将以30秒为目标值发送时间同步请求,但实际的时间间隔可能会在4秒到16秒之间变化。
示例2-faq
server ntp.local minpoll 0 maxpoll 0 xleave
hwtimestamp eth0
3.4 chronyd
3.5 chronyc
chronyc是一个命令行界面程序,可用于监视chronyd的性能,并在运行时更改各种操作参数。
- chronyc tracking:跟踪命令显示有关系统时钟性能的参数。
root@imx6qdlsabresd:/app/log# chronyc tracking Reference ID : 127.127.1.1 () Stratum : 10 Ref time (UTC) : Thu Sep 07 23:14:28 2023 System time : 14539.303710938 seconds fast of NTP time Last offset : -0.271399736 seconds RMS offset : 105085.718750000 seconds Frequency : 499789.469 ppm fast Residual freq : +0.000 ppm Skew : 0.000 ppm Root delay : 0.000000 seconds Root dispersion : 0.000001 seconds Update interval : 0.1 seconds Leap status : Normal
四、gpsd + chrony + pps 介绍和使用
- gpsd + chrony : 实现时间同步。
- gpsd + chrony + pps : 实现更高精度的时间同步。
4.1 gpsd 介绍
4.1.3 gpsd 交叉编译
- 交叉编译 gpsd
- 编译依赖:pps-tools 软件包中的 timepps.h 头文件(放到对应位置)
4.2 pps 和 pps-tools 介绍和使用
- PPS 支持需要:GPS接收器 + 硬件设计连接 + 内核配置开启 + 驱动。
- 查看当前系统是否已支持 pps
- ppstest查看pps信号时间值
- 查看pps中断
- pps配合gpsd使用(配合)
PPS是指脉冲秒信号(Pulse Per Second),它是一个精确的时间标记信号,用于精确同步计时设备。PPS通常由GPS接收器提供,以确保设备与全球卫星导航系统(GPS)的时间同步。
PPS-Tools是一个用于处理和分析PPS信号的软件工具包。它包含了一系列用于接收、分析和校准PPS信号的工具和库。使用PPS-Tools,用户可以通过计算和比较PPS信号与其他参考时间源的差异来实现高精度的时间同步。
PPS-Tools的功能包括:
- PPS接收器:用于接收和解码PPS信号的硬件设备。
- PPS校准:通过与参考时间源比较PPS信号,进行时间校准和同步。
- 数据记录和分析:记录和分析PPS信号的时间戳数据。
- 精度测量:测量PPS信号与参考时间源之间的精确度和稳定性。
PPS-Tools是一个强大的工具包,广泛用于科学研究、计时设备校准和精确时间同步等领域。它可以帮助用户实现微秒级甚至更高精度的时间同步,对于需要高精度时间标记的应用非常有用。
查看当前系统是否已支持 pps
dmesg | grep pps
在应用层,使用ppstest工具可查看pps信号时间值(pps信号发生时刻的系统时间点)
ppstest若没有需通过源码交叉编译得到。
查看pps中断:
root@imx6qdlsabresd:/app/test/debug_gpsd# cat /proc/interrupts |grep pps37: 258897 0 0 0 gpio-mxc 5 Edge pps.-1
root@imx6qdlsabresd:/app/test/debug_gpsd# cat /proc/interrupts |grep pps37: 258899 0 0 0 gpio-mxc 5 Edge pps.-1
root@imx6qdlsabresd:/app/test/debug_gpsd# cat /proc/interrupts |grep pps37: 258903 0 0 0 gpio-mxc 5 Edge pps.-1
参考资料
- 关于GPS的1PPS时间同步功能探索与测试
- 关于GPS的1PPS时间同步功能探索与测试
- 源码下载:https://packages.ubuntu.com/zh-cn/source/jammy/riscv64/pps-tools
x.参考资料
- 一文了解自动驾驶中的时间同步
- 嵌入式Linux时间同步 gpsd+chrony+pps
- chrony+gpsd部署pps校时
- chrony+gpsd部署pps校时
CentOS 7时间和日期和时间同步
五、比较两个设备时间差
5.1 date 命令
两台设备分别通过xshll工具进行SSH连接,然后工具—发送输入到—所有会话:
# 获取系统时间纳秒
date +%Y-%m-%d' '%H:%M:%S.%N# 获取系统时间毫秒
date +%Y-%m-%d' '%H:%M:%S.%N | cut -b 1-23# 自动循环获取时间(有休眠、不如手动敲)
while true; do date +%Y-%m-%d' '%H:%M:%S.%N; sleep 0.1;done
- 若性能要求高:务必确保两台设备、PC在同一个交换机下。
- 时间误差:PC到两台设备的网络时延、IO时延。
5.2 ntpdate命令
5.2.1 使用示例
只比较和ntp 服务器的时间差,不校时:
./ntpdate -q ntp1.aliyun.com
响应:
server 120.25.115.20, stratum 2, offset 32.851291, delay 0.04848 8
Sep 14:43:24 ntpdate[15053]: step time server 120.25.115.20 offset 32.851291 sec
5.2.2 ntpdate 交叉编译
版权声明:本文为CSDN博主「钱德勒宾」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38184741/article/details/100011091
前言:
板子上需要在开机时同步网络时间。
之前板子上有ntpdate
工具,可以直接使用。最近突然不能用了。需要手动移植一个。
开发板:Hi3559A
编译工具链:aarch64-himix100-linux-gcc
ntp
版本:ntp-4.2.8p13.tar.gz
openssl
版本:openssl-1.0.1f.tar.gz
(注意,使用其他版本会报版本错误)
5.2.3 chronyd 命令
# 校时一次退出
chronyd -q 'pool pool.ntp.org iburst'# 不校时,只比较时间差
chronyd -Q 'pool pool.ntp.org iburst'
帮助
- Xavier + GPS/PPS + NTP时间设置
- https://www.ntp.org/downloads/
GPSD+chrony 没有秒脉冲,两台设备校时后相差60ms(AG15的RSU和大唐的OBU)
两台AG15的RSU相差2ms
PC到设备延时呢。。。
这篇关于嵌入式设备时间同步(校时)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!