linuxptp 订阅
linuxptp
信息
操作系统
Linux
开发语言
C/C++
开源协议
GPLv2
linuxptp
linuxptp 是 C 语言实现的 Precision Time Protocol (PTP) (IEEE standard 1588),支持 Linux 系统。该项目的目的是实现一个可靠的标准库。
收起全文
精华内容
下载资源
问答
  • Linux PTP原理

    2018-04-14 23:44:10
    本文档详细描述了PTP时钟同步的原理、应用场景、以及与NTP的对比等信息
  • linuxptp源代码

    2018-06-04 11:23:46
    linuxptp源代码,需要的同学可以下载使用,最近正在弄需要时间同步的项目,大家可以一起看下
  • 该软件是根据Linux的IEEE标准1588的精确时间协议(PTP)的实现。 双重设计目标是提供标准的可靠实现,并使用Linux内核提供的最相关和最现代的应用程序编程接口(API)。 支持旧版API和其他平台不是目标。 执照 该...
  • linuxptp2.0详解.txt

    2020-06-02 14:15:53
    文件是开源软件linuxptp2.0的解释信息,包括文件功能简介,处理逻辑介绍,术语介绍等等,如果你需要理解1588协议栈linuxptp2.0的实现逻辑,该文档是很好的参考文档,能帮你最快的理解代码;文档绝对原创,全网独一份...
  • 另外,我们支持linuxptp特定的实现管理TLV。 该库支持三个PTP网络层 UDP over IP版本4 UDP over IP版本6 以太网上的PTP-我们不支持VLAN标签 此外,我们支持使用Unix网络并与linuxptp ptp4l通信 libpmc库 该库使用...
  • 该项目是根据Linux的IEEE标准1588的精确时间协议(PTP)的实现。
  • Linuxptp使用总结

    2021-12-15 15:31:27
    1.Linuxptp文档及源码:http://linuxptp.sourceforge.net/ 2.ptp及ntp介绍及比较:https://www.redhat.com/en/blog/combining-ptp-ntp-get-best-both-worlds 3.Linux下Linuxptp软件包使用说明:...

    Reference
    1.Linuxptp文档及源码:http://linuxptp.sourceforge.net/
    2.ptp及ntp介绍及比较:https://www.redhat.com/en/blog/combining-ptp-ntp-get-best-both-worlds
    3.Linux下Linuxptp软件包使用说明:https://documentation.suse.com/zh-cn/sled/15-SP2/html/SLED-all/cha-tuning-ptp.html
    4.Linuxptp的一些补充知识:https://www.techplayon.com/ieee-1588-precision-time-protocol-ptp-for-telecom-networks/
    5.我实验时使用的ptp服务器供应商提供的资料:https://blog.csdn.net/hongke_Tech/article/details/120087565?spm=1001.2101.3001.6650.10&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-10.fixedcolumn&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-10.fixedcolumn

    正文:
    1.linuxptp软件下载:

    sudo apt install linuxptp
    

    或者按照参考1以源码方式下载。
    2.Linuxptp使用:下载完成后,Linuxptp主要包含两个软件,一个是ptp4l,一个是phc2sys,前者用于PTP同步,包含硬件时钟同步和软件时间同步(系统时钟同步),后者用于在ptp4l实现硬件时间同步后将系统时钟同步到硬件时钟。
    要使用ptp4l,首先得确定网卡支持的同步类型,可通过ethtool测试。
    在这里插入图片描述
    对于支持硬件时间戳的主机,可通过命令

    sudo ptp4l -i eth0 -m -H
    

    运行主时钟。通过

    ptp4l -i eth0 -m -H -s
    

    运行slave时钟,若不指定-s,即不设置主机为slave模式时,由于存在多个可能的主时钟,此时会通过最佳主时钟(BMC)算法从候选主时钟中选取一个grandmaster来作为整个ptp域的时钟源。经过上述步骤后,作为slave的主机会将本地的硬件时间同步到grandmaster,但此时系统时间可能仍未同步(大多数接口获取的时间戳都是系统时间戳),所以需要调用phc2sys实现系统时间对硬件时间的同步。

    sudo phc2sys -s eth0 -w
    

    至此,从设备时间同步完成。
    若主机不支持硬件时间戳,可通过命令

    sudo ptp4l -i eth0 -m -S -s
    

    通过软件时间同步的方式实现对grandmaster的时间同步,该方式直接将系统时间与grandmaster的硬件时间对齐。
    3.Linuxptp状态介绍
    从设备通过ptp4l与grandmaster同步时若添加了-m参数,将会在终端上打印同步状态如下:
    在这里插入图片描述
    master offset 值表示测得的与主时钟之间的偏差(以纳秒为单位)。

    s0、s1、s2 指示器显示时钟伺服的不同状态:s0 表示已解锁,s1 表示时钟步进,s2 表示已锁定。如果伺服处于已锁定状态 (s2),并且 pi_offset_const 选项在配置文件中设置为负值,则时钟不会步进,而只会缓慢调整(有关详细信息,请参见 man 8 ptp4l)。

    freq 值表示时钟的频率调整(以十亿分率 (ppb) 为单位)。

    path delay 值表示从主时钟发送的同步消息的预计延迟(以纳秒为单位),该延迟可通过E2E或P2P方式测量,默认为E2E。

    端口 0 是用于本地 PTP 管理的 Unix 域套接字。端口 1 是 eth0 接口。

    INITIALIZING、LISTENING、UNCALIBRATED 和 SLAVE 是发生 INITIALIZE(初始化)、RS_SLAVE(本地时钟成为slave) 和 MASTER_CLOCK_SELECTED(选定了对应的主时钟) 事件时更改的端口状态示例。当端口状态从 UNCALIBRATED 更改为 SLAVE 时,表示计算机已与 PTP 主时钟成功同步。

    展开全文
  • linux ptp指北

    2021-12-30 17:37:28
    linux ptp指北 ptp是什么 PTP(Precision Time Protocol)精确时间协议,由IEEE1588规定,用于同步网络中两台机器的时间。1558使用延时-请求测量机制达到主从时间同步。 PTP协议相关 时钟类型 PTP按照时钟类型分为:...

    linux ptp指北

    ptp是什么

    PTP(Precision Time Protocol)精确时间协议,由IEEE1588规定,用于同步网络中两台机器的时间。1558使用延时-请求测量机制达到主从时间同步。

    PTP协议相关

    时钟类型

    PTP按照时钟类型分为:

    • OC

      普通时钟

    • TC

      透明时钟

    • BC

      边界时钟

    承载方式

    PTP报文支持多种报文承载方式:

    • 基于MAC
    • 基于UDP

    报文类型

    PTP报文分为事件报文和通用报文,其中事件报文包括:

    • Sync
    • Delay_Req
    • PDelay_Req
    • PDelay_Resp

    通用报文包括:

    • Announce
    • Follow_Up
    • Delay_Resp
    • Pdelay_Resp_Follow_Up
    • Management
    • Signaling

    PTP报文参数

    • 发包频率

    ptp4l

    ptp4l是linux下面PTP协议的实现程序,使用ptp4l可以收发ptp报文。

    命令行参数

    [root@localhost x86]#  ./ptp4l -h
    
    usage: ptp4l [options]
    
     Delay Mechanism
    
     -A        Auto, starting with E2E
     -E        E2E, delay request-response (default)
     -P        P2P, peer delay mechanism
    
     Network Transport
    
     -2        IEEE 802.3
     -4        UDP IPV4 (default)
     -6        UDP IPV6
    
     Time Stamping
    
     -H        HARDWARE (default)
     -S        SOFTWARE
     -L        LEGACY HW
    
     Other Options
    
     -f [file] read configuration from 'file'
     -i [dev]  interface device to use, for example 'eth0'
               (may be specified multiple times)
     -p [dev]  Clock device to use, default auto
               (ignored for SOFTWARE/LEGACY HW time stamping)
     -s        slave only mode (overrides configuration file)
     -l [num]  set the logging level to 'num'
     -m        print messages to stdout
     -q        do not print messages to the syslog
     -v        prints the software version and exits
     -h        prints this message and exits
    

    配置文件

    使用-f ptp4l.cfg指定使用配置文件。

    The configuration file is divided into sections. Each section starts with a line containing its name enclosed in brackets and it follows with settings. Each setting is placed on a separate line, it contains the name of the option and the value separated by whitespace characters. Empty lines and lines starting with # are ignored.
    
    The global section (indicated as [global]) sets the program options, clock options and default port options. Other sections are port specific sections and they override the default port options. The name of the section is the name of the configured port (e.g. [eth0]). Ports specified in the configuration file don't need to be specified by the -i option. An empty port section can be used to replace the command line option.
    Port Options
    
    logAnnounceInterval
        The mean time interval between Announce messages. A shorter interval makes ptp4l react faster to the changes in the master-slave hierarchy. The interval should be the same in the whole domain. It's specified as a power of two in seconds. The default is 1 (2 seconds). 
    logSyncInterval
        The mean time interval between Sync messages. A shorter interval may improve accuracy of the local clock. It's specified as a power of two in seconds. The default is 0 (1 second). 
    logMinDelayReqInterval
        The minimum permitted mean time interval between Delay_Req messages. A shorter interval makes ptp4l react faster to the changes in the path delay. It's specified as a power of two in seconds. The default is 0 (1 second). 
    logMinPdelayReqInterval
        The minimum permitted mean time interval between Pdelay_Req messages. It's specified as a power of two in seconds. The default is 0 (1 second). 
    announceReceiptTimeout
        The number of missed Announce messages before the last Announce messages expires. The default is 3. 
    transportSpecific
        The transport specific field. Must be in the range 0 to 255. The default is 0. 
    path_trace_enabled
        Enable the mechanism used to trace the route of the Announce messages. The default is 0 (disabled). 
    follow_up_info
        Include the 802.1AS data in the Follow_Up messages if enabled. The default is 0 (disabled). 
    delay_mechanism
        Select the delay mechanism. Possible values are E2E, P2P and Auto. The default is E2E. 
    network_transport
        Select the network transport. Possible values are UDPv4, UDPv6 and L2. The default is UDPv4.
    
    Program and Clock Options
    
    twoStepFlag
        The local clock is a two-step clock if enabled. One-step clocks are not supported yet. The default is 1 (enabled). 
    slaveOnly
        The local clock is a slave-only clock if enabled. The default is 0 (disabled). 
    priority1
        The priority1 attribute of the local clock. It is used in the best master selection algorithm, lower values take precedence. Must be in the range 0 to 255. The default is 128. 
    priority2
        The priority2 attribute of the local clock. It is used in the best master selection algorithm, lower values take precedence. Must be in the range 0 to 255. The default is 128. 
    clockClass
        The clockClass attribute of the local clock. It denotes the traceability of the time distributed by the grandmaster clock. The default is 248. 
    clockAccuracy
        The clockAccuracy attribute of the local clock. It is used in the best master selection algorithm. The default is 0xFE. 
    offsetScaledLogVariance
        The offsetScaledLogVariance attribute of the local clock. It characterizes the stability of the clock. The default is 0xFFFF. 
    domainNumber
        The domain attribute of the local clock. The default is 0. 
    free_running
        Don't adjust the local clock if enabled. The default is 0 (disabled). 
    freq_est_interval
        The time interval over which is estimated the ratio of the local and peer clock frequencies. It is specified as a power of two in seconds. The default is 1 (2 seconds). 
    assume_two_step
        Treat one-step responses as two-step if enabled. It is used to work around buggy 802.1AS switches. The default is 0 (disabled). 
    tx_timestamp_retries
        The number of retries to fetch the tx time stamp from the kernel when a message is sent. The default is 100. 
    clock_servo
        The servo which is used to synchronize the local clock. Currently only one servo is implemented, a PI controller. The default is pi. 
    pi_proportional_const
        The proportional constant of the PI controller. When set to 0.0, the value will be selected from 0.7 and 0.1 for the hardware and software time stamping respectively. The default is 0.0. 
    pi_integral_const
        The integral constant of the PI controller. When set to 0.0, the value will be selected from 0.3 and 0.001 for the hardware and software time stamping respectively. The default is 0.0. 
    pi_offset_const
        The maximum offset the PI controller will correct by changing the clock frequency instead of stepping the clock. When set to 0.0, the controller will never step the clock. The default is 0.0. 
    ptp_dst_mac
        The MAC address where should be PTP messages sent. Relevant only with L2 transport. The default is 01:1B:19:00:00:00. 
    p2p_dst_mac
        The MAC address where should be peer delay messages the PTP peer. Relevant only with L2 transport. The default is 01:80:C2:00:00:0E. 
    logging_level
        The maximum logging level of messages which should be printed. The default is 6 (LOG_INFO). 
    verbose
        Print messages to the standard output if enabled. The default is 0 (disabled). 
    use_syslog
        Print messages to the system log if enabled. The default is 1 (enabled). 
    time_stamping
        The time stamping method. The allowed values are hardware, software and legacy. The default is hardware.
    

    default.cfg

    [global]
    #
    # Default Data Set
    #
    twoStepFlag             1
    slaveOnly               0
    socket_priority         0
    priority1               128
    priority2               128
    domainNumber            0
    #utc_offset             37
    clockClass              248
    clockAccuracy           0xFE
    offsetScaledLogVariance 0xFFFF
    free_running            0
    freq_est_interval       1
    dscp_event              0
    dscp_general            0
    dataset_comparison      ieee1588
    G.8275.defaultDS.localPriority  128
    maxStepsRemoved         255
    #
    # Port Data Set
    #
    logAnnounceInterval     1
    logSyncInterval         0
    operLogSyncInterval     0
    logMinDelayReqInterval  0
    logMinPdelayReqInterval 0
    operLogPdelayReqInterval 0
    announceReceiptTimeout  3
    syncReceiptTimeout      0
    delayAsymmetry          0
    fault_reset_interval    4
    neighborPropDelayThresh 20000000
    masterOnly              0
    G.8275.portDS.localPriority     128
    asCapable               auto
    BMCA                    ptp
    inhibit_announce        0
    inhibit_delay_req       0
    ignore_source_id        0
    #
    # Run time options
    #
    assume_two_step         0
    logging_level           6
    path_trace_enabled      0
    follow_up_info          0
    hybrid_e2e              0
    inhibit_multicast_service       0
    net_sync_monitor        0
    tc_spanning_tree        0
    tx_timestamp_timeout    1
    unicast_listen          0
    unicast_master_table    0
    unicast_req_duration    3600
    use_syslog              1
    verbose                 0
    summary_interval        0
    kernel_leap             1
    check_fup_sync          0
    #
    # Servo Options
    #
    pi_proportional_const   0.0
    pi_integral_const       0.0
    pi_proportional_scale   0.0
    pi_proportional_exponent        -0.3
    pi_proportional_norm_max        0.7
    pi_integral_scale       0.0
    pi_integral_exponent    0.4
    pi_integral_norm_max    0.3
    step_threshold          0.0
    first_step_threshold    0.00002
    max_frequency           900000000
    clock_servo             pi
    sanity_freq_limit       200000000
    ntpshm_segment          0
    msg_interval_request    0
    servo_num_offset_values 10
    servo_offset_threshold  0
    write_phase_mode        0
    #
    # Transport options
    #
    transportSpecific       0x0
    ptp_dst_mac             01:1B:19:00:00:00
    p2p_dst_mac             01:80:C2:00:00:0E
    udp_ttl                 1
    udp6_scope              0x0E
    uds_address             /var/run/ptp4l
    #
    # Default interface options
    #
    clock_type              OC
    network_transport       UDPv4
    delay_mechanism         E2E
    time_stamping           hardware
    tsproc_mode             filter
    delay_filter            moving_median
    delay_filter_length     10
    egressLatency           0
    ingressLatency          0
    boundary_clock_jbod     0
    #
    # Clock description
    #
    productDescription      ;;
    revisionData            ;;
    manufacturerIdentity    00:00:00
    userDescription         ;
    timeSource              0xA0
    
    展开全文
  • 使用 IEEE 1558 管理消息通过 Unix 网络与 linuxptp 通信的库。 该库提供由 linuxptp 项目的 pmc 工具提供的功能。
  • PTP4l是关于1588v2 PTP协议栈的开源代码,其中实现了各种ITU 规定的profile. ITU规定的各种profile主要满足电信要求的一些profile, profile的定义请参看1588v2协议。PTP4l实现了BC时钟和OC时钟。 1.语法 PTP4l ...

            PTP4l是关于1588v2 PTP协议栈的开源代码,其中实现了各种ITU 规定的profile. ITU规定的各种profile主要满足电信要求的一些profile, profile的定义请参看1588v2协议。PTP4l实现了BC时钟和OC时钟。

     1. 语法

    PTP4l [-A|-E|-P] [-2|-4|-6] [-H|-S|-L] [-f config] [-p phc-device] [-s] [-l print-level] [-q] [-v] [-i interface]...

    选项

    -A 自动选择延迟机制,初始为E2E,当收到对端的delay request的时候切换到P2P.

    -E 选择延迟 请求-响应机制E2E。默认机制

    -P 选择对端延迟机制P2P.

    -2 IEEE802.3网络传输

    -4 UDP IPv4传输 默认值

    -6 UDP IPv6 传输

    -H 硬件打时间戳

    -S 软件打时间戳

    -L legacy硬件时间戳

    -f config 读取配置文件

    -p phc设备,硬件时间戳的设备 /dev/PTP0

    -s 只作为从时钟

    -l 打印级别,级别是根据syslog定义的。默认为6 LOG_INFO

    -q 不打印消息到系统日志

    -v 打印消息的标准输出

    -i interface 确定一个PTP的端口。

    -h 显示帮助信息

    2. 配置文件

    配置文件分为几部分。每个部分均以包含其名称的一行开头,并带有括号。每个设置都放在单独的行上,其中包含
    选项和由空格字符分隔的值。空行和以#开头的行将被忽略。

       全局部分(表示为[global])设置程序选项,时钟选项和默认端口选项。其他部分是端口特定的部分,它们将覆盖默认端口选项。该部分的名称是

       已配置端口的名称(例如[eth0])。 -i选项无需指定配置文件中指定的端口。空端口部分可用于替换命令行选项。

    端口选项
    延迟不对称
    传输路径和接收路径的时间差(以纳秒为单位)。当主机到从机的传播时间较长时,该值应为正;从机到主机的时间较长时,该值应为负。的
    默认值为0纳秒。

       logAnnounceInterval

    公告消息之间的平均时间间隔。较短的时间间隔使PTP41对主从层次结构中的更改反应更快。在整个域中,间隔应相同。被指定为两秒的幂。默认值为1(2秒)。

       logSyncInterval

    同步消息之间的平均时间间隔。较短的时间间隔可以提高本地时钟的准确性。指定为两秒的幂。默认值为0(1秒)。

       logMinDelayReqInterval

    Delay_Req消息之间的最小允许平均时间间隔。较短的时间间隔使PTP41对路径延迟的变化反应更快。指定为两秒的幂。默认值为0(1第二)。

       logMinPdelayReqInterval

    Pdelay_Req消息之间的最小允许平均时间间隔。指定为两秒的幂。默认值为0(1秒)。

       announceReceiptTimeout

    在最后一条“公告”消息过期之前,错过的“公告”消息的数量。预设值为3。

       syncReceiptTimeout

    在触发“最佳主时钟”选择之前,可能丢失的同步/跟随消息的数量。此选项用于根据802.1AS-2011标准在gPTP模式下运行。将此选项设置为零将禁用同步消息超时。默认值为0或禁用。具体运输运输特定领域。必须在0到255之间。默认值为0。

       path_trace_enabled

    启用用于跟踪通告消息路由的机制。默认值为0(禁用)。

       follow_up_info

    如果启用,则在Follow_Up消息中包括802.1AS数据。默认值为0(禁用)。

       fault_reset_interval

    从检测到端口故障到重置故障之间的时间(以秒为单位)。该值表示为2的幂。将此值设置为-128或特殊关键字“ ASAP”将使故障排除。立即重置。默认值为4(16秒)。

       fault_badpeernet_interval

    从检测到对等网络配置错误到重置故障之间的时间(以秒为单位)。在间隔时间内,该端口被禁用。该值以秒为单位,并且特殊关键字ASAP

    延迟机制

    选择延迟机制。可能的值为E2E,P2P和Auto。默认为E2E。

       hybrid_e2e

    从企业概要草案中启用“混合”延迟机制。启用后,处于从属状态的端口会将其延迟请求消息发送到从主机的公告消息中获取的单播地址。港口

    处于主状态的用户将使用单播延迟响应来回复单播延迟请求。如果将delay_mechanism设置为P2P,则此选项无效。默认值为0(禁用)。

       PTP_dst_mac

    PTP消息应发送到的MAC地址。仅与L2运输有关。默认值为01:1B:19:00:00:00。

       p2p_dst_mac

    对等延迟消息应发送到的MAC地址。仅与L2运输有关。默认值为01:80:C2:00:00:0E。

       network_transport

    选择网络传输。可能的值为UDPv4,UDPv6和L2。默认值为UDPv4。

       neighborPropDelayThresh

    对等延迟的上限(以纳秒为单位)。如果估计的对等延迟大于此值,则将该端口标记为不支持802.1AS。

       min_neighbor_prop_delay

    对等延迟的下限(以纳秒为单位)。如果估计的对等延迟小于此值,则将该端口标记为不支持802.1AS。

       tsproc_mode

    选择用于计算偏移量和延迟的时间戳处理模式。可能的值为filter,raw,filter_weight,raw_weight。当同步消息的速率(logSyncInterval)接近时,原始模式的性能很好

    与延迟消息的速率(logMinDelayReqInterval或logMinPdelayReqInterval)类似。加权对于较大的网络抖动很有用(例如,软件时间戳)。默认为过滤器。

       delay_filter

    选择用于过滤测得的延迟和对等延迟的算法。可能的值是moving_average和moving_median。默认值为moving_median。

       delay_filter_length

    样本中延迟滤波器的长度。预设值为10。

    出口延迟

    指定参考平面上的实际传输时间与报告的传输时间戳之间的纳秒差。该值将添加到从硬件获得的出口时间戳记中。默认值为0。

       入口延迟

    指定报告的接收时间戳和参考平面上的实际接收时间之间的纳秒差。该值将从从硬件获得的入口时间戳中减去。默认值为0。

       boundary_clock_jbod

    当作为边界时钟运行时(即,配置了多个网络接口时),PTP4l执行完整性检查,以确保所有端口共享同一硬件时钟设备。这个选项允许PTP4l使用“只是一堆彼此不同步的设备”作为边界时钟。对于此模式,必须通过外部程序来同步时钟收集,例如

      phc2sys(8)处于“自动”模式。默认值为0(禁用)。

      udp_ttl

    指定IPv4组播消息的生存时间(TTL)值和IPv6组播消息的跳数限制。此选项仅与IPv4和IPv6 UDP传输相关。默认值为1以限制程序和时钟选项

       twoStepFlag

    为同步消息启用两步模式。单步模式只能与硬件时间戳一起使用。默认值为1(启用)。只有从

    如果启用,本地时钟是仅从时钟。此选项仅适用于1588时钟,不应为802.1AS时钟启用。默认值为0(禁用)。

       gmCapable

    如果启用此选项,则本地时钟将成为主时钟。这仅适用于802.1AS时钟,对1588时钟无效。默认值为1(启用)。优先级1

    本地时钟的priority1属性。在最佳主选择算法中使用它,较低的值优先。必须在0到255之间。默认值为128。优先级2

    本地时钟的priority2属性。最佳主选择算法中使用它,较低的值优先。必须在0到255之间。默认值为128。

       clockClass

    本地时钟的clockClass属性。它表示由主时钟分配的时间的可追溯性。默认值为248。

       时钟精度

    本地时钟的clockAccuracy属性。最佳主选择算法中使用它。默认值为0xFE。

       offsetScaledLogVariance

    本地时钟的offsetScaledLogVariance属性。它代表了时钟的稳定性。默认值为0xFFFF。

       domainNumber

    本地时钟的域属性。默认值为0。

       自由奔跑

    如果启用,请勿调整本地时钟。默认值为0(禁用)。

       freq_est_interval

    估计本地时钟频率与对等时钟频率之比的时间间隔。指定为两秒的幂。默认值为1(2秒)。假设如果启用,则将一步响应视为两步响应。它用于解决有问题的802.1AS交换机。默认值为0(禁用)。

       tx_timestamp_timeout

    最近发送消息时,等待内核发送tx时间戳的轮询时间(以毫秒为单位)。预设值为1。

       check_fup_sync

    由于可能在网络,硬件或网络堆栈中发生数据包重新排序,因此后续消息可能会出现在匹配的同步消息之前到达应用程序中。因为这是正常的发生次数少,并且sequenceID消息字段确保正确匹配,PTP4l程序接受乱序数据包。此选项使用网络堆栈中的软件时间戳添加其他检查验证同步消息是否确实先到达。仅当您不信任主服务器生成的序列ID时,此选项才有用。默认值为0(禁用)。

       时钟伺服

    用于同步本地时钟的伺服。对于PI控制器,有效值为“ pi”;对于使用线性回归的自适应控制器,有效值为“ linreg”;对于NTP SHM参考时钟,允许的有效值为“ ntpshm”

    另一个同步本地时钟的过程(将SHM段号设置为域号),对于始终拨打频率偏移为零的伺服器,则为“ nullf”(用于SyncE节点)。默认值为“ pi”。

       pi_proportional_const

    PI控制器的比例常数。当设置为0.0时,将从当前同步间隔通过以下公式设置比例常数。默认值为0.0

       i_integral_const

    PI控制器的积分常数。当设置为0.0时,将从当前同步间隔通过以下公式设置积分常数。默认值为0.0。

    ki = min(ki_scale * sync ^ ki_exponent,ki_norm_max / sync)

       pi_proportional_scale

    公式中的kp_scale常数用于根据同步间隔设置PI控制器的比例常数。设置为0.0时,硬件和软件时间将从0.7和0.1中选择。分别冲压。默认值为0.0。

       pi_proportional_exponent

    公式中的kp_exponent常数用于根据同步间隔设置PI控制器的比例常数。默认值为-0.3。

       pi_proportional_norm_max

    公式中的kp_norm_max常数用于根据同步间隔设置PI控制器的比例常数。默认值为0.7

       pi_integral_scale

    公式中的ki_scale常数用于根据同步间隔设置PI控制器的积分常数。设置为0.0时,硬件和软件时间的值将从0.3和0.001中选择分别冲压。默认值为0.0。

       pi_integral_exponent

    公式中的ki_exponent常数,用于根据同步间隔设置PI控制器的积分常数。默认值为0.4。

       pi_integral_norm_max

    公式中的ki_norm_max常数,用于根据同步间隔设置PI控制器的积分常数。默认值为0.3。

       step_threshold

    伺服器将通过更改时钟频率而不是步进时钟来校正最大偏移量。设置为0.0时,伺服器除启动外将永不步进时钟。以秒为单位指定。默认值是0.0。该选项以前称为pi_offset_const。

       first_step_threshold

    伺服器将通过更改时钟频率而不是步进时钟来校正最大偏移量。这仅适用于第一次更新。以秒为单位指定。设置为0.0时, 时钟开始。默认值为0.00002(20微秒)。该选项以前称为pi_f_offset_const。

       最大频率时钟的最大允许频率调整,以十亿分之一(ppb)为单位。这是硬件所允许的最大限制。设置为0时,将使用硬件限制。默认是900000000(90%)。该选项以前称为pi_max_frequency。

       sanity_freq_limit

    未校正时钟与系统单调时钟之间的最大允许频率偏移,以十亿分之一(ppb)为单位。这用作同步时钟的健全性检查。当测量到较大的偏移量时,将显示警告消息,并且将重置伺服器。设置为0时,将禁用完整性检查。默认值为200000000(20%)。

       ntpshm_segment

    ntpshm伺服器使用的SHM段号。默认值为0。

       udp6_scope

    指定IPv6组播消息的期望范围。这将用作主地址的第二个字节。此选项仅与IPv6传输有关。请参阅RFC4291。默认值为0x0E

       uds_address

    指定用于接收本地管理消息的UNIX域套接字的地址。默认值为/ var / run / PTP4l

       ogging_level

    应打印的消息的最大日志记录级别。默认值为6(LOG_INFO)。冗长的如果启用,则将消息打印到标准输出。默认值为0(禁用)。

       use_syslog

    如果启用,则将消息打印到系统日志中。默认值为1(启用)。

       summary_interval

    打印时钟摘要统计信息的时间间隔。指定为两秒的幂。统计信息包括偏移均方根(RMS),最大绝对偏移,频率偏移均值和标准差,以及路径延迟均值和标准差。单位是纳秒和十亿分之一(ppb)。如果间隔中只有一个时钟更新,则将打印样本而不是统计数据。消息以LOG_INFO级别打印。默认值为0(1秒)。

       时间戳记

    时间戳记方法。允许的值为硬件,软件和旧版。默认为硬件。

       产品描述

    产品描述字符串。允许的值的形式必须为ManufacturerName; modelNumber; instanceIdentifier,并且最多包含64个utf8符号。默认值为“ ;;”。

       版本数据

    修订说明字符串包含节点硬件(HW),固件(FW)和软件(SW)的修订。允许值的形式为HW; FW; SW,最多包含32个utf8符号。默认“ ;;”。

       userDescription

    用户描述字符串。允许的值具有名称形式;位置,并且最多包含128个utf8符号。默认值为空字符串。

       厂商身份

    制造商ID,应该是制造商拥有的OUI。默认值为00:00:00。

       kernel_leap

    宣布a秒后,让内核通过步进时钟来应用它,而不是通过伺服来校正一秒偏移,这将通过更改时钟频率来缓慢地校正一秒偏移

    (除非将step_threshold选项设置为通过步进来纠正此类偏移量)。仅与软件时间戳相关。默认值为1(启用)。

       timeSource

    时间源是一个单字节代码,它给出了所使用的本地时钟类型的概念。该值纯粹是信息性的,对“最佳主时钟”算法的结果没有影响,并被公布当时钟成为GM时。

    生成配置文件

    echo -e "[global]\ntx_timestamp_timeout\t1000\n" > PTP4l.cfg

    echo -e "sanity_freq_limit\t0\n" >> PTP4l.cfg

    echo -e "logSyncInterval\t0\n" >> PTP4l.cfg

    echo -e "assume_two_step\t0\n" >> PTP4l.cfg

    echo -e "twoStepFlag\t0\n" >> PTP4l.cfg

    echo -e "time_stamping\tonestep\n" >> PTP4l.cfg

    3. Linuxptp的实现

    3.1 硬件支持

    查看网卡是否支持软硬件时间戳:

    • sudo ethtool -T eno1

    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)

    • 软件时间戳需要包括参数
      SOF_TIMESTAMPING_SOFTWARE
      SOF_TIMESTAMPING_TX_SOFTWARE
      SOF_TIMESTAMPING_RX_SOFTWARE
    • 硬件时间戳需要包括参数
      SOF_TIMESTAMPING_RAW_HARDWARE
      SOF_TIMESTAMPING_TX_HARDWARE
      SOF_TIMESTAMPING_RX_HARDWARE

     

     3.2 LinuxPTP源码下载

    • sudo git clone git://git.code.sf.net/p/linuxptp/code linuxptp
    • cd linuxptp
    • sudo make
    • sudo make install

     

    3.3 run linuxptp

     软件时间戳测试

    服务端(主钟):

    • sudo ptp4l -i enp0s31f6 -m -S

    客户端(从钟):

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

    运行结果:
    主钟:

    https://img-blog.csdnimg.cn/20190110173900627.png

    主钟运行结果示意图

    从钟:

    https://img-blog.csdnimg.cn/20190110173637476.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JVUFRPY3RvcHVz,size_16,color_FFFFFF,t_70

    从钟运行结果示意图

    运行一会儿以后:

    https://img-blog.csdnimg.cn/20190110174058579.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JVUFRPY3RvcHVz,size_16,color_FFFFFF,t_70

    从钟锁定示意图

    log中的内容为:

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

     硬件时间戳测试

    服务端(主钟):

    • sudo ptp4l -i enp0s31f6 -m -H

    客户端(从钟):

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

    运行结果:
    从钟:

    https://img-blog.csdnimg.cn/20190110180122490.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JVUFRPY3RvcHVz,size_16,color_FFFFFF,t_70

     

    硬件同步示意图

     

     

     

    展开全文
  • 我搬到这里作为第1章,而这篇文章简单列举下linuxptp软件和内核空间的接口函数。 系统框图 我们通过一个系统框图对1588软硬件系统进行整体的认识。这个系统框图是基于Linux操作系统的,纯FPGA的1588实现就不介绍了。...

    欢迎淘宝搜索飞灵科技,我司相关新产品陆续上线。

    之前的博文IEEE 1588/802.1AS标准、硬件,Linux软件学习建议中有一段介绍了1588整体的软硬件系统。我搬到这里作为第1章,而这篇文章简单列举下linuxptp软件和内核空间的接口函数。

    系统框图

    我们通过一个系统框图对1588软硬件系统进行整体的认识。这个系统框图是基于Linux操作系统的,纯FPGA的1588实现就不介绍了。
    在这里插入图片描述

    • 硬件层:硬件层就是带有1588硬件辅助的网络控制器,由硬件PTP时钟向网络报文提供时间戳,时间戳的捕获是在MAC这一层。图里没有画PHY,类似地,如果使用PHY的1588功能的话,那硬件层就是PHY,由PHY上的PTP时钟向网络报文提供时间戳,时间戳的捕获是在PHY这一层。
    • 内核空间:Linux内核空间主要由两部分驱动来支持1588功能。其一是PTP时钟驱动,用于对硬件PTP时钟进行操作。其二是网络驱动,确切的说是网络驱动中的1588硬件时间戳的支持,用于捕获收发报文的硬件时间戳。当然,如果硬件层使用的是PHY的1588功能的话,内核空间对应的收发网络报文硬件时间戳的支持就在PHY驱动中。
    • 用户空间:PTP软件协议栈是用户空间的应用程序,它与内核驱动以及硬件的交互,是通过内核的用户空间API的实现的。对PTP时钟的操作是通过PHC (PTP Hardware Clock) API,对报文的收发以及硬件时间戳的使用是通过socket函数和SO_TIMESTAMPING选项。

    linuxptp中ptp4l程序和内核的接口函数同样包含两部分,第一部分是ptp clock操作的函数,第二部分是socket报文收发和时间戳的函数。

    ptp clock操作函数

    对于ptp4l程序,ptp clock的操作其实只用到了两个函数:

    • clock_gettime
    • clock_adjtime

    clock_gettime

    用于获取时钟的时间,根据传入的clockid,可以获取不同的时钟时间,如CLOCK_MONOTONIC单调时间,即流逝时间;CLOCK_REALTIME系统时间,即挂钟时间;或者传入ptp clock id,获取ptp时钟时间,等等。详细信息可参考https://man7.org/linux/man-pages/man2/clock_gettime.2.html

    clock_adjtime

    用于调整时钟的时间,同样可以根据clockid调整不同的时钟。其功能包含,调整时间偏差,调整频率偏差等。详细信息可参考https://man7.org/linux/man-pages/man2/clock_adjtime.2.html

    socket函数

    Linux的报文收发,以及时间戳的使用都是通过socket函数,还有一些ioctl函数和内核交互。ptp4l用到的socket函数包括:

    • socket
    • setsockopt
    • getsockopt
    • sendto
    • recvmsg

    socket

    socket函数创建一个socket用于网络通信。socket和ioctl的详细信息可参考https://man7.org/linux/man-pages/man2/socket.2.htmlhttps://man7.org/linux/man-pages/man7/socket.7.html

    setsockopt/getsockopt

    对socket的配置,以及获取配置,如传输协议,多播地址,时间戳类型等等都是通过setsockopt/getsockopt函数。详细信息可参考https://man7.org/linux/man-pages/man2/getsockopt.2.html

    sendto

    sendto用于报文的发送,详细信息可参考https://man7.org/linux/man-pages/man2/sendto.2.html

    recvmsg

    recvmsg用于报文的接收,详细信息可参考https://man7.org/linux/man-pages/man2/recvmsg.2.html

    时间戳

    时间戳的操作在这里单独介绍一下,硬件时间戳的配置实际上是通过上面介绍的ioctl和setsockopt完成的:

    • ioctl(fd, SIOCSHWTSTAMP, &ifreq)
    • setsockopt(fd, SOL_SOCKET, SO_TIMESTAMPING, &flags, sizeof(flags))

    报文的发送和接收时间戳的获取,都是通过解析recvmsg接收到的报文的辅助数据域获得的。对于接收报文,通过recvmsg来接收可以理解,对于发送报文,为什么要调用recvmsg呢?其实Linux内核在通过sendto函数发送报文后,会将这个报文的拷贝包含它的发送时间戳通过error queue返回给socket,在sendto发送报文后,立即调用recvmsg(注意传入MSG_ERRQUEUE参数)就可以获取发送的报文和时间戳了。

    展开全文
  • linuxptp-1.8linuxptp-1.8\.gitignorelinuxptp-1.8\CODING_STYLE.orglinuxptp-1.8\COPYINGlinuxptp-1.8\README.orglinuxptp-1.8\address.hlinuxptp-1.8\bmc.clinuxptp-1.8\bmc.hlinuxptp-1.8\clock.clinuxptp-1.8\cl...
  • TSN之linuxptp交叉编译

    2020-08-25 14:21:02
    简单说下TSN测试组件之一的linuxptp的交叉编译踩的一些坑,希望可以给需要的小伙伴一些帮助
  • linuxptp.spec

    2021-05-10 23:01:54
    Name:linuxptpVersion:2.0Release: 3Summary:Linuxptp is an implementation of the Precision Time Protocol (PTP)Group:System Environment/BaseLicense:GPLv2+URL:http://linuxptp.sourceforge.net/Source...
  • 以 ptp4l、E2E 为例的 Linuxptp 代码分析

    千次阅读 2021-04-15 10:03:15
    Linuxptp 代码分析 最近在学习这部分内容,发现网上没有多少相关的代码分析的文章,结合自己的学习,和大家分享一下,希望大家批评指正! linuxptp code git clone git://git.code.sf.net/p/linuxptp/code linuxptp ...
  • IEEE1588 program used for ptp sync.
  • Linux下交叉编译 linuxptp

    千次阅读 2019-11-28 16:59:02
    1. LinuxPTP源码下载   方式1)Windows浏览器输入网址下载:     http://sourceforge.net/projects/linuxptp/files/latest/download     下载后的压缩包拷贝到虚拟机;   方式2)虚拟机上输入...
  • get install linuxptp 2、下载linuxptp源码: git clone git://git.code.sf.net/p/linuxptp/code linuxptp cd linuxptp cp configs/gPTP.cfg ./ vim gPTP.cfg 添加: p2p_dst_mac01:1B:19:00:00:00 修改: ...
  • 参考文档链接如下: 1.交叉编译工具安装步骤 ... 2.项目地址(离线模式可以下载源码,...3.Linux平台linuxptp操作步骤 https://blog.csdn.net/BUPTOctopus/article/details/86246335 详细步骤如下(此处仅介绍下载
  • Linux-交叉编译-linuxptp

    2021-06-18 14:48:31
    1. LinuxPTP源码下载 方式1)Windows浏览器输入网址下载: http://sourceforge.net/projects/linuxptp/files/latest/download , 下载后的压缩包拷贝到虚拟机; 方式2)虚拟机上输入下面的命令下载: sudo gi
  • 最近项目中用到了PTP做时间同步,基于linuxptp做的改进和开发。刚入门对很多东西不是很清楚,用wireshark在测试设备上抓了个包,对照源码和官方文档学习一波,请各位大佬多多批评指正。 目前设备上采用的是主从同步...
  • PTP的一些名词 PTP域中的节点称为时钟节点,PTP协议定义了以下三种类型的基本时钟节点: OC(Ordinary Clock,普通时钟):只有一个PTP通信端口的时钟是普通时钟。 BC(Boundary Clock,边界时钟):有一个以上PTP...
  • LinuxPTP时间戳的生成

    2021-05-15 04:29:47
    说实话,在Linuxptp的代码中,从sync msg的allocate到使用send函数将其发出,我都没有看到有对msg的hwts进行任何操作。 在最后准备发出的raw_send函数内,&msg->hwts作为参数被传入,应该是要为其赋值。 cnt = send...
  • linuxptp/ptp4l PTP时钟同步配置选项

    千次阅读 2021-04-24 11:52:57
    匆忙翻译了一下linuxptp ptp4l的帮助手册,不尽准确,不尽详细,仅供参考。欢迎留言讨论相关问题。 1 名称 ptp4l - PTP普通时钟/边界时钟/透明时钟协议栈 2 描述 ptp4l是一个Linux上PTP协议(IEEE 1588)的实现,...
  • centos配置linuxptp

    万次阅读 2018-02-10 09:19:07
    centos配置linuxptp 【参考文献】 redhad配置ptp https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/ch-configuring_ptp_using_ptp4l#s2-A...
  • linuxptp的bug

    2021-12-19 17:45:39
    ptp4l[556.407]: timed out while polling for tx timestamp ptp4l[556.408]: increasing tx_timestamp_timeout may correct this issue, but it is likely caused by a driver bug 还有 ptp4l[106746.946]: port 1...
  • 将生成的ptp4l,复制到你的板卡 /usr/bin/下 #这样你就可以直接使用这个可执行文件了 我简单说一下我遇到的问题 : 错误的地方是: #ifndef Name //记不清楚具体是什么了 static inline int func(void) { return 0...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,479
精华内容 991
关键字:

linuxptp

linux 订阅
友情链接: Lambert.m.zip