• 利用LinuxPTP进行时间同步(软/硬件时间戳) - 研一


    转自:https://blog.csdn.net/BUPTOctopus/article/details/86246335
    官方文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-using_ptp
    查看网卡是否支持软硬件时间戳:

    sudo ethtool -T eno1
    
    • 1
    Time stamping parameters for eno1:
    Capabilities:
    	hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
    	software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
    	hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
    	software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
    	software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
    	hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
    PTP Hardware Clock: 0
    Hardware Transmit Timestamp Modes:
    	off                   (HWTSTAMP_TX_OFF)
    	on                    (HWTSTAMP_TX_ON)
    Hardware Receive Filter Modes:
    	none                  (HWTSTAMP_FILTER_NONE)
    	all                   (HWTSTAMP_FILTER_ALL)
    	ptpv1-l4-sync         (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
    	ptpv1-l4-delay-req    (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
    	ptpv2-l4-sync         (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
    	ptpv2-l4-delay-req    (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
    	ptpv2-l2-sync         (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
    	ptpv2-l2-delay-req    (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
    	ptpv2-event           (HWTSTAMP_FILTER_PTP_V2_EVENT)
    	ptpv2-sync            (HWTSTAMP_FILTER_PTP_V2_SYNC)
    	ptpv2-delay-req       (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    软件时间戳需要包括参数
    SOF_TIMESTAMPING_SOFTWARE
    SOF_TIMESTAMPING_TX_SOFTWARE
    SOF_TIMESTAMPING_RX_SOFTWARE

    硬件时间戳需要包括参数
    SOF_TIMESTAMPING_RAW_HARDWARE
    SOF_TIMESTAMPING_TX_HARDWARE
    SOF_TIMESTAMPING_RX_HARDWARE

    查看Usage

    ptp4l -h

    1
      延迟机制选项
      -A 			Auto,自动选择延迟机制。,从E2E开始,当收到对等延迟请求时切换到P2P
      -E 			E2E,选择延迟请求 - 响应(E2E)机制。 默认是用这个机制。 单个PTP通信路径上的所有时钟必须使用相同的机制。 使用E2E机制在端口上收到对等延迟请求时,将输出warning
      -P 			P2P,对等延迟机制
      网络传输选项
      -2 			IEEE 802.3
      -4 			UDP IPV4(默认)
      -6 			UDP IPV6
      时间戳选项
      -H  			使用硬件时间戳(默认)
      -S  			使用软件时间戳					
      -L  			LEGACY HW时间戳
      其他选项
      -f	[file]	从指定文件file中读取配置。 默认情况下不读取任何配置文件。
      -i	[dev]	选择PTP接口设备,例如eth0(可多次指定)必须至少使用此选项或配置文件指定一个端口。
      -p	[dev]	在Linux内核v3.5之前,无法发现与网络接口关联的PHC设备。 此选项指定在旧内核上运行时要使用的PHC设备(例如/ dev/ptp0)。要使用的时钟设备,默认为auto,忽略软件/ LEGACY HW时间戳(不推荐使用此选项)
      -s			slaveOnly mode,从时钟模式(覆盖配置文件)
      -t			透明时钟模式
      -l	[num]	将日志记录级别设置为'num',默认是6
      -m			将消息打印到stdout
      -q			不打印消息到syslog
      -v			打印软件版本并退出
      -h			help
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    2、run linuxptp
    2.1 软件时间戳,主从模式测试
    服务端(主钟):

    sudo ptp4l -i enp0s31f6 -m -S
    
    • 1

    客户端(从钟):

    sudo ptp4l -i eno1 -m -S -s
    
    • 1

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/5在这里插入图片描述
    fa2f6de3b904a25802eec8b79ae23fe.png)
    在这里插入图片描述
    运行一会儿以后:在这里插入图片描述
    log中的内容为:

    master offset : 即PTP协议中定义的主从端时间差,单位:ns
    s0,s1,s2 : 表示时钟伺服器的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃行同步,只是缓慢调整
    freq:
    port 0:INITIALIZING to LISTENING on INIT_COMPLET : 本地PTP管理的Unix域socket;
    port 1:new foreign … : eno1上的端口;
    从钟端口状态由UNCALIBRATED 变为SLAVE时,则从钟已经成功地与best master同步。
    2.2 硬件时间戳测试
    服务端(主钟):

    sudo ptp4l -i enp0s31f6 -m -H
    
    • 1

    客户端(从钟):

    sudo ptp4l -i eno1 -m -H -s
    
    • 1

    如果要修改系统时间的话,需要PHC把通过PTP协议获取到的时间 同步到系统上,执行phc2sys命令:

    #主钟
    sudo phc2sys -m -s CLOCK_REALTIME -c enp0s31f6 -w
    sudo ptp4l -i enp0s31f6 -m -H
    #从钟
    sudo phc2sys -m -s eno1 -w
    sudo ptp4l -i eno1 -m -H -s
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    运行结果:
    从钟:
    在这里插入图片描述
    显然用硬件时间戳同步的精度高得多,而且这只是一块普通网卡,走的还是校园网

    2.3 配置文件
    运行时使用-f可以指定配置文件,命令行会覆盖配置文件,常用的配置项如下(‘#’后面是注释,实际配的时候要留注释的话注释需要单独一行,目前是这样):

    [global]
    twoStepFlag             1 #PTP两步模式是否开启
    clientOnly              0 #
    socket_priority         0
    priority1               128 #对应BMCA里的优先级1
    priority2               128 #对应BMCA里的优先级2
    domainNumber            0   #PTP域number
    #utc_offset             37 #配置闰秒,截止目前是37秒,一般不用配置因为时钟源配过(默认是注释的)
    clockClass              248 #对应BMCA里的clockClass
    …………
    logAnnounceInterval     1  # log间隔
    delayAsymmetry          0  # 可配置的链路不对称性,正数表示rx比tx延迟高,负数表示低,单位ns。
    …………
    BMCA                    ptp # 指定BMCA算法 ptp、noop、自定义
    …………
    ptp_dst_mac             01:1B:19:00:00:00
    p2p_dst_mac             01:80:C2:00:00:0E
    ……
    clock_type              OC
    network_transport       UDPv4 #L2 UDPv4 UDPv6,对应命令行的-2 -4 -6
    delay_mechanism         E2E # E2E P2P
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    2.4 透明时钟(TC)模式测试(已修复)
    /- 这个bug已经修复了 -\

    TC和BC都需要至少有两个interface;
    执行以下命令

    sudo ptp4l -i eno1 eno2 -m -H -t
    
    
    • 1
    • 2

    提示无效的选项:

    在这里插入图片描述
    嗯?usage里分明写着 -t 是transparent clock 啊
    sudo vim ptp4l.8
    嗯,-f -i -m -p -l -i -A -E -P -2 -4 -6 -H -S -L -q -v -h
    ??就是没有-t,不懂了

    手动TC/BC:需要设备有俩网卡,一个卡绑从钟一个卡绑定主钟,来实现TC/BC。效果其实差不多。
    最近开发时遇到的USRP的U L O问题:

    "U"错误
    当host PC或运行于其上的应用程序不能为USRP以足够快速率提供样值时,往往会出现"U"错误,举例说明:USRP以设定的采样速率为5M/s需求样值,而host PC却只能以低于5M/s的速率提供样值时,就会出现"U"错误。
    "O"错误
    当host PC或运行于其上的应用程序不能以足够快的速率来处理USRP提供的样值时,往往会出现"O"错误,距离说明:当USRP以设定的采样速率为5M/s提供样值,而host PC却只能以处理低于5M/s的速率处理样值是,就会出现"O"错误。
    "L"错误
    USRP的设计机理是:要求Packet中的时间戳要早于FPGA中的时间戳。如果指令到达FPGA时Packet中的时间戳已经过时,USRP会给出"L"错误,也就是指令到达的时间比预计执行时间要晚。
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    vim的使用介绍以及命令大全
    UE4光照基础
    【SwiftUI项目】0009、SwiftUI项目-费用跟踪-记账App项项目-第1/3部分 - 本地数据
    探索APP流量变现的新途径
    Android JVM内存模型——老生常谈
    Go语言进阶,interface接口,socket套接字
    软件设计师考试---标题、判定表、页式存储管理器、快速原型模型、三层C/S结构、耦合类型,
    Spring Authorization Server 0.2.3发布,放出联合身份DEMO
    代理模式【静态代理和动态代理实现业务功能扩展】
    【JavaSE】文件操作篇(一)文件基础操作与IO流原理及分类
  • 原文地址:https://blog.csdn.net/qq_38350702/article/details/132831886