linuxptp是Precision Time Protocol (PTP)的实现,以linuxptp命名ptp协议栈一定程度上有点片面,详细分析linuxptp会发现该开源软件包含的内容相当丰富,大致可以分为4个部分:

  1. 将GPS时间同步到PHC,这是一种使用1pps + TOD的时间同步技术,主要由ptp协议栈中的ts2phc进行实现。
  2. 对ptp协议的Ordinary clock, Boundary clock等时钟“角色”的实现,是对1588协议的实体化,主要由ptp协议栈中的ptp4l实现。(没有找到1588协议原文,可从各硬件厂商的1588资料中窥探一二)
  3. 实现PHC时间同步到系统时间,由ptp协议栈中phc2sys实现。
  4. 其他就是一些调试和维测工具,如phc_ctl。
    本文对阅读了linuxptp源码基础上对理解原理有所帮助,有误之处欢迎交流。

一、1pps + TOD的时间同步技术

服务器可以通过接收GPS的1pps和TOD进行处理,获取高精度时间。
原理是GPS发送来的1pps是高精度的,即每整秒一个脉冲,偏移很小,但是PPS不携带时间信息,TOD中包含UTC时间,将TOD和1pps结合就能够获取到UTC时间,且UTC时间以高精度的频率抵达。


计算UTC时间和pps到来时的系统时间偏差,调整到系统时间,并将调整后的系统时间设置到PHC。

参考文档
https://blog.csdn.net/hltt3838/article/details/109118949
参考文档:
https://www.cnblogs.com/shaohef/p/15808900.html

有些时间服务器就是实现了GPS时间同步到PHC这部分功能,并能输出1588报文。

二、ptp4l

对1588协议的实现,内容很多,包含主从时钟选择,主从时钟状态机,主从间消息交互等,有空再另开一篇细说。
参考文档
http://www.butlergroup.ie/wp-content/uploads/wpsc/product-files/880_Calnex_Technical_Brief___IEEE_1588v2_PTP_Mar10.pdf

三、phc2sys

phc2sys的同步有三种方式:

没有指定pps设备,指定了PHC设备

命令:phc2sys -c CLOCK_REALTIME -s eth0 -O 0

这种方式的原理是:通过clock_gettime()获取phc时间,并计算系统时间和phc时间的差值,从而对phc时间进行调整。

read_phc()获取到的ts是tdst2,是系统时间,这种算法计算出来的偏差是
offset = (tdst2 - tdst1)/2 + (tdst1 - tsrc) 。对系统时间ts进行offset的调整就能使得系统时间接近phc时间。
官方推荐不推荐使用这种方式,具体原因可以参考这篇文献:https://www.researchgate.net/publication/260434305_Synchronizing_the_Linux_system_time_to_a_PTP_hardware_clock
在另外一篇文章中有这篇文献的简陋翻译版。

指定PPS设备,没有指定PHC设备

phc2sys -d /dev/pps0 -O 0 -m 这样执行没有用-s指定phc设备
这种方式的时间源是pps产生的整秒值,偏差是系统时间相对于整秒值的偏差。 这样执行没有用-s指定phc设备,read_pps读取到pps的整秒数,以及相对于整秒数的偏差。
read_pps()
通过ioctl获取pps时间,这个pps时间是pps产生当时的系统时间,pps是整秒产生的,但是系统时间可能是飘的,所以获取到的这个时间值是有小数点的,比如pps产生的时间点是166663313s,但是获取出来的值可能是166663313.1245s, 将这个值转换为ns,然后取余得到的offset就是小数点后面的秒数。将这个offset来对系统时间进行校正。
这样对系统时间进行调整,让偏差越来越小,这种“自我矫正”方式缺少绝对时间,比如当前系统时间是1988年,那使用这种方式就一直是在1988年对每秒进行矫正,没有同步到当前时间。

代码分析:

src_name变量就是NULL
clock_add(&priv, src_name) // phc2sys.cc->clkid = CLOCK_INVAILD
do_pps_loop()priv->sync_offset = 0;read_pps()//获得pps时间update_clock()//将pps时间更新到pps时间

指定了PPS设备以及PHC设备

命令:phc2sys -d /dev/pps0 -s eth0 -O 0 -m 这样执行,使用了-s指定了phc设备
这种方式与上面那种方式基本原理相同,但是多了一个read_phc的过程,为的是获取当前的绝对时间。

do_pps_loop()priv->sync_offset = 0;read_pps()//获得pps时间read_phc(&phc_offset, &phc_ts, &phc_delay)//返回的phc_ts实际上是系统时间,但是认为这个系统时间是不准的,所以计算了一个校正值phc_offset,然后将phc_ts -= phc_offset对phc_ts(系统时间)进行修正,然后phc_ts = phc_ts / NS_PER_SEC *  NS_PER_SEC获取整秒值,这就是通过系统时间并校正后得到绝对时间的整秒值pps_offset = pps_ts - phc_ts就是pps时间相对于绝对时间整秒值的偏差。update_clock()//将pps时间更新到pps时间

参考资料:
这篇文章罗列了一些很好的资料
https://www.cnblogs.com/shaohef/p/15808900.html
https://blog.csdn.net/yaojiawan/article/details/124601694
上面这篇中文博客的图都来自于下面两篇文章。
https://www.researchgate.net/publication/260434305_Synchronizing_the_Linux_system_time_to_a_PTP_hardware_clock
https://www2.renesas.cn/us/en/document/whp/linux-phc-infrastructure-5g
linuxptp guthub
https://github.com/vladimiroltean/linuxptp

linuxptp分析相关推荐

  1. 以 ptp4l、E2E 为例的 Linuxptp 代码分析

    最近在学习这部分内容,发现网上没有多少相关的代码分析的文章,结合自己的学习,和大家分享一下,希望大家批评指正! linuxptp code git clone git://git.code.sf.ne ...

  2. linuxptp产生pps相关接口

    PHC产生PPS,调用了一些PPS接口,以下为查阅分析的PPS接口资料. 一.简介 LinuxPPS提供了一个编程接口(API),用于在系统中定义多个PPS源. PPS是指"每秒脉冲&quo ...

  3. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  4. 2022-2028年中国自动驾驶系统行业现状调研分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国自动驾驶系统行业市场行业相关概述.中国自 ...

  5. 2022-2028年中国阻尼涂料市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国阻尼涂料行业市场行业相关概述.中国阻尼涂 ...

  6. 2021-2028年中国阻燃装饰行业市场需求与投资规划分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国阻燃装饰行业市场行业相关概述.中国阻燃装 ...

  7. 2022-2028年全球与中国漂白吸水棉市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国漂白吸水棉行业市场行业相关概述.全 ...

  8. 2022-2028年全球与中国青苔清洗剂市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国青苔清洗剂行业市场行业相关概述.全 ...

  9. 2022-2028年全球与中国氢碘化物市场智研瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国氢碘化物行业市场行业相关概述.全球 ...

  10. 2022-2028年全球与中国人字拖市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了全球与中国人字拖行业市场行业相关概述.全球与 ...

最新文章

  1. JavaScript中的+运算
  2. golang中的strings.Split
  3. matlab热度图确定色标_C++实现类似Matlab的colormap Jet(灰度图生成彩色热度图)
  4. 【鲲鹏来了】手把手教你在鲲鹏上使用编程语言——C语言
  5. HTML5基本知识小测验
  6. mysql脚本之家_详细讲述MySQL中的子查询操作 (来自脚本之家)
  7. C#将数据库中的数据绑定到dataGridView
  8. 智慧城市项目在PPP模式中的应用
  9. win10应用商店linux_解决win10应用商店“由于公司策略 此应用已被阻止”的方法...
  10. mysql优化-Explain工具介绍
  11. 微信授权登录基本流程(网站应用)
  12. 游戏化学习:让学习之路成为游戏升级系统。
  13. 关于批量下载MODIS数据的坑
  14. 分布式电商项目五:使用人人开源搭建前后分离的后台管理系统
  15. 哪里计算机考研只考一门课,计算机考研|专业课只考一门数据结构的院校有哪些...
  16. pycharm中新建项目出现的问题及过程(小白自学)
  17. 做题心得篇12.26
  18. 玩lol哪个服务器最新,LOL:坑最多的四个服务器,有没有你的大区?
  19. 白月黑羽selenium自动化测试课后习题
  20. 新手开店感想接口,使用一件铺货如何优化标题,如何优化商品主图?

热门文章

  1. (三)Web模块:【5】Servlet3.0 与 SpringMVC 整合
  2. 2021阿里巴巴校招笔试题
  3. DOS命令:diskpart
  4. 用 FFMPEG 合并 MP4 视频
  5. PB 导出的Excel,打开会提示文件格式和扩展名不匹配问题
  6. python编程之条形码生成大全
  7. 硬核!深信服春招3面,终获20k入职offer!
  8. 2020年美国新冠肺炎疫情数据分析
  9. 3d游戏计算机怎么配置要求吗,3DMAX软件对电脑的配置要求
  10. 3rd Batch请查收!您的问题解答清单