嵌入式Linux 时间同步 gpsd+chrony

嵌入式Linux系统,外接GPS设备,系统通过NMEA数据和pps进行时间同步,同时将本系统作为时间同步服务器。

一、基本原理

​ NMEA中获取UTC时间的yymmddhhmmss,然后使用pps的秒脉冲对串口或者网路传输的延时进行校正。但是其中Linux检测pps信号的延时无法校正。

二、内核配置

1.PPS端口设备树

a.设备树添加pps节点

pps {compatible = "pps-gpio";pinctrl-names = "default";pinctrl-0 = <&pinctrl_pps>;gpios = <&gpio5 0 GPIO_ACTIVE_HIGH>;status = "okay";
};

b.设备树pinctl添加gpio信息

 pinctrl_pps: ppsgrp {fsl,pins = <MX6UL_PAD_SNVS_TAMPER0__GPIO5_IO00 0x1b0b1>;};
2.内核选项配置

a.pps相关配置

CONFIG_PPS=y
CONFIG_PPS_DEBUG=y
CONFIG_PPS_CLIENT_KTIMER is not set
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_GPIO=y
CONFIG_GPIO_SYSFS=y
3.buildroot根文件系统配置

a.gpsd和chrony相关配置

BR2_PACKAGE_GPSD_CLIENT_DEBUG=y
# BR2_PACKAGE_GPSD_OLDSTYLE is not set
BR2_PACKAGE_GPSD_PROFILING=y
BR2_PACKAGE_GPSD_NTP_SHM=y
BR2_PACKAGE_GPSD_PPS=y
# BR2_PACKAGE_GPSD_USER is not set
# BR2_PACKAGE_GPSD_GROUP is not set
# BR2_PACKAGE_GPSD_FIXED_PORT_SPEED is not set
# BR2_PACKAGE_GPSD_MAX_CLIENT is not set
# BR2_PACKAGE_GPSD_MAX_DEV is not set
BR2_PACKAGE_GPSD_RECONFIGURE=y
BR2_PACKAGE_GPSD_CONTROLSEND=y
# BR2_PACKAGE_GPSD_SQUELCH is not set
BR2_PACKAGE_PPS_TOOLS=y
BR2_PACKAGE_CHRONY=y

注意:PPS_TOOLS一定要选上,否则chrony中的refclock PPS驱动不被编译

三、gpsd配置和使用

1.gpsd参数配置
gpsd -n udp://127.0.0.1:6600 /dev/pps2

udp://127.0.0.1:6600 指定GNSS数据来源。带有前缀“udp://”的 URI,后跟主机名、冒号和端口号。守护进程将打开一个套接字侦听到达指定地址和端口的 UDP 数据报,这将被解释为好像它们是由串行设备发出的。示例: udp://127.0.0.1:5000

tcp://127.0.0.1:6600 指定GNSS数据来源。带有前缀“tcp://”的 URI,后跟主机名、冒号和端口号。守护进程将打开一个到指定地址和端口的套接字并从中读取数据包,这些数据包将被解释为好像它们是由串行设备发出的。示例: tcp://data.aishub.net:4006

gpsd -D 5 -N -n /dev/ttymxc2 /dev/pps2

-D 5 输出5级log

-N 前台运行

-n 在轮询与其关联的任何 GPS 之前,不要等待客户端连接(chrony配合时必选参数)

gpsd -n /dev/ttymxc2 /dev/pps2

/dev/ttymxc2 指定GPS设备串口,传感器连接到的串行或 USB 设备的普通 Unix 设备名称。示例:/dev/ttyUSB0

/dev/pps2指定pps设备,PPS 源所连接的 PPS 设备的普通 Unix 设备名称。设备名称必须以“/dev/pps”开头,并且本地串行或 USB GPS 设备也必须可用。示例: /dev/pps0

四、chrony配置和使用

1.chrony.conf
makestep 0.1 3                       //若系统时间与基准时间相差大于0.1s,直接跳变系统时间,仅限前3个时钟周期
rtcsync                             //允许系统时间同步rtc时间,Linux每11min同步一次
allow                               //允许设备作为时间同步服务器
leapsectz right/UTC                 //瑞秒相关设置
driftfile /var/lib/chrony/drift     //指定var/lib/chrony/drift存储时间补偿增减率,每次开机增减率有效前使用存储值
dumpdir /var/run/chrony             //指定测量历史记录存储目录,测量历史用于计算补偿增减率。启动读取后删除refclock PPS /dev/pps0 refid PPS lock GPSD prefer precision 1e-7 poll 2  //指定硬件PPS为优先时间源
refclock SHM 0 refid GPSD precision 1e-1 offset 0.9999 delay 0.2 poll 2 //指定硬件GPS为时间源
2.chrony参数配置
chronyd -f /etc/chrony.conf

五、调试总结

1.gpsd+chrony基本原理

gpsd从串口或者网络读取gnss数据并进行解析,将解析结果以UNIX socket或者共享内存等方式输出

chrony从UNIX socket或者共享内存取得解析后的gnss和pps信息,两者结合,校正系统时间

注意:chrony校正时并不会使系统时间跳变,通过拨快或者拨慢的方式(控制时间增减率)达到时间校正的目的

2.gpsd+chrony配合注意事项

a.以下内核或者根文件系统选项必须配置

CONFIG_PPS=y
CONFIG_PPS_CLIENT_LDISC=y
CONFIG_PPS_CLIENT_GPIO=y
CONFIG_GPIO_SYSFS=y
BR2_PACKAGE_PPS_TOOLS=y

b.以 root 身份运行gpsd

c.gpsd必须在 -n 模式下运行,这样即使没有客户端处于活动状态,时钟也会更新

d.与 chronyd 对话不需要 gpsd 配置。chronyd 是使用文件 /etc/chrony.conf 或 /etc/chrony/chrony.conf 配置的。检查您的配置文档以获取正确的位置

e.最后请注意,chronyd 需要在 gpsd 之前启动,以便在 gpsd 启动之前准备好套接字。

f. chronyd 连接到 gpsd

​ i.使用套接字方法让 chronyd 连接到 gpsd,请在您的 chrony.conf 文件中添加以下几行。套接字被命名为 /run/chrony.XXXX.sock。其中 XXXX 被 gpsd 使用的设备名称的基本名称替换。如果您的接收器在 /dev/ttyS0 上输出串行数据,则相应的套接字是/run/chrony.ttyS0.sock。如果您的 PPS 在 /dev/pps0 上,那么对应的套接字是 /run/chrony.pps0.sock。

将 XXXX 替换为设备串行端口的基本名称,通常是 ttyS0、ttyACM0 或 ttyAMA0。
将 YYYY 替换为您的 PPS 设备的基本名称,通常是 pps0。

refclock SOCK /run/chrony.XXXX.sock refid GPS precision 1e-1 offset 0.9999
refclock SOCK /run/chrony.YYYY.sock refid PPS precision 1e-7

​ ii.使用基本的 ntpd 兼容 SHM 方法让 gpsd 连接到 chronyd。要使用它而不是套接字,请将这些行添加到基本的 chrony.conf 文件中:

server 0.us.pool.ntp.org
server 1.us.pool.ntp.org
server 2.us.pool.ntp.org
server 3.us.pool.ntp.orgdriftfile /var/lib/chrony/driftallow# set larger delay to allow the NMEA source to overlap with
# the other sources and avoid the falseticker status
refclock SHM 0 refid GPS precision 1e-1 offset 0.9999 delay 0.2
refclock SHM 1 refid PPS precision 1e-7

您需要在 SHM 1 行上添加“precision 1e-7”,因为 chronyd 无法从 SHM 结构中读取精度。在不知道 SHM 1 上 PPS 的高精度的情况下,它可能不会对其数据给予足够的重视。

3.手动调试命令
su -                                     //获取root权限
killall -9 gpsd chronyd                     //清除已经启动的gpsd和chrony进程
chronyd -f /etc/chrony.conf                 //启动chrony指定从/etc/chrony.conf读取配置文件
sleep 2
gpsd -n /dev/ttymxc0 /dev/pps0              //指定从/dev/ttymxc0串口获取GNSS数据
sleep 2chronyc tracking                         //检查时间是否同步
chronyc sources                             //检测时间源状态

六、参考文档

1.GPSD Time Service HOWTO,gpsd官方介绍如何使chrony和gpsd协作文档(此次调试的关键文档)

2.GPSD官方文档

3.chrony官方文档

4.CSDN博客对chrony详解教程

5.引用linxu时间同步原理介绍

6.引用linxu时间同步原理介绍

嵌入式Linux 时间同步 gpsd+chrony相关推荐

  1. 嵌入式linux 时间同步,解决嵌入式Linux中的时区问题

    如果说让我做上层软件的工作,我做起来可以得心应手,但是让我做平台方面的工作(系统问题解决.驱动编写.软件移植等工作),确实不熟悉.所以很多问题都是摸着石头过河,没有经验.许多问题在有经验的朋友那里是小 ...

  2. 嵌入式linux时间同步,ntpdate的交叉编译

    一.网站 http://www.ntp.org/downloads.html SoftwareDownloads < Main < NTP 二.配置 ./configure --prefi ...

  3. linux 时间同步服务 chrony

    同步阿里时间服务器和建立私有时间服务器同步 时间同步(同步阿里云时间服务器) centos 安装 ubuntu 安装 配置文件 监听的端口 如果系统上已经有其他时间服务,那么先停止 防火墙设置 Fir ...

  4. Linux时间同步:chrony

    linux7以上版本都自带chrony服务 如果没有安装,则使用yum安装,如果安装了,请忽略 yum -y install chrony 说明:Chrony由两个程序组成,分别是chronyd和ch ...

  5. Linux 时间同步 ntpdchrony 内网

    Linux 时间同步 ntpd&chrony 在任何服务器集群中,为了更好的协同工作,除了一些互信机制外,需要的就是时间同步功能,如果时间不同步,就好比让在中国的同事与美国的同事进行沟通,会造 ...

  6. linux i2c调试命令,嵌入式Linux下I2C接口调试

    By Toradex秦海 1).简介 I2C是嵌入式设备最为常用的接口之一,常用于如下面这些应用场景,因此本文就基于嵌入式Linux演示在User Space进行I2C设备调试. - Digital ...

  7. [云计算学习3] Linux基础 : 使用chrony搭建时间服务器并让下游NTP同步时间

    Linux基础 : 使用chrony搭建时间服务器并让下游NTP同步时间 第一步 安装Chrony并设置开机启动 第二步 为主机1(服务器)搭建时间服务器 第二步 为主机2(客户端)同步主机1的NTP ...

  8. Linux 时间同步systemd-timesyncd介绍

    在Linux系统中存在两个时钟时间,分别是 硬件时钟RTC(Real Time Clock) 系统时钟(System Clock) 硬件时钟是指的在主板上的时钟设备,也就是通常可以在BIOS画面设置的 ...

  9. Linux同步时间chrony替换NTP简单好用

    Linux同步时间chrony替换NTP简单好用 1.介绍 Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件.它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算 ...

最新文章

  1. 别以为真懂Openstack: 虚拟机创建的50个步骤和100个知识点(5)
  2. OSPF协议工作原理
  3. 零基础如何快速上手高精度AI模型开发?
  4. 创建RGB、CMYK颜色分量圆代码
  5. java动态拼接请求_在JavaWeb项目中处理静态文件或动态链接拼接网站地址的最优处理方案...
  6. Apache JMeter 菜单说明
  7. C#LeetCode刷题之#27-移除元素(Remove Element)
  8. IDEA中引入和启动TOMCAT的本质
  9. 一定要多反思复盘和整理
  10. 关于python的闭包与装饰器的实验
  11. 例解回归分析(原书第5版)
  12. 信息图表是如何炼成的(三):阶层结构与isometric
  13. Alpine Linux如何安装软件
  14. 图形化开放式生信分析系统开发 - 9 Illumina测序仪测序数据自动拆分
  15. 【翻译】使用Sencha Ext JS创建美丽的图画(1)
  16. 单例设计模式(饿汉式VS懒汉式)
  17. 计算机电源不通电 维修,电脑忽然不通电,换了电源也不行,是哪里坏了?
  18. 在React中解析渲染markdown文件
  19. Python--huan
  20. 我国软件行业发展机遇与发展前景分析

热门文章

  1. oracle sql 降龙十八掌
  2. [检测过检测] 重写 ReadProcessMemory 、WriteProcessMemory
  3. 研究基于springboot的租房推荐系统的目的和意义
  4. hadoop集群搭建(超详细版)
  5. 码农幸福指数:哪种编程语言最让人感到幸福?
  6. 四大湖排名问题的python实现(穷举法)
  7. 计算机一级模拟7试题,2016年9月计算机一级MSOffice考前模拟试题及答案(7)
  8. 基于微信小程序的中医药配方系统+后台管理系统(SSM+mysql)-JAVA.VUE【数据库设计、论文、源码、开题报告】
  9. 大学生求职面试最忌讳的话
  10. 创建人物特写视频flash教程(一)