四个linux开发板,如何基于PTP协议在同一时间内返回之间是时间误差[阿里云Iot]

在四个都能跑Ubuntu20.04的linux开发板上运行linuxptp,建立好了主从时间同步关系,以其中一个开发板为主时钟,其他为从时钟,如何在主时钟下达一个指令返回当前从时钟与主时钟之间的时间误差?并且让作为从时钟的Linux开发板得知下发指令?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
5 条回复 A 作者 M 管理员
  1. 要基于 PTP(精确时间协议)在四个 Linux 开发板上返回从时钟与主时钟之间的时间误差,您可以按照以下步骤进行操作:

    在主时钟开发板上:

    1. 确保已在主时钟开发板上正确配置并运行 linuxptp,将其配置为主时钟,并与其他三个从时钟开发板建立同步关系。
    2. 在主时钟开发板上使用 ptp4l 命令启动 PTP 协议守护进程,并使用 phc2sys 命令将 PHC(硬件时钟)与系统时钟同步。

    在从时钟开发板上:

    1. 确保已在每个从时钟开发板上正确配置并运行 linuxptp,将其配置为从时钟,并与主时钟开发板建立同步关系。
    2. 在从时钟开发板上使用 ptp4l 命令启动 PTP 协议守护进程,并使用 phc2sys 命令将 PHC(硬件时钟)与系统时钟同步。

    在主时钟开发板上执行以下指令:

    1. 使用 ptp4l 命令查看当前主从时钟的状态:

      ptp4l -m

    2. 记下各从时钟的 Clock ID(时钟标识符),通常以数字开头,如 00:01:02:03:04:05。

    3. 在主时钟开发板上使用 ptp4l 命令向特定从时钟查询时间戳:

      ptp4l -p <从时钟的 Clock ID>

    在从时钟开发板上执行以下指令:

    1. 使用 ptp4l 命令查看当前主从时钟的状态:

      ptp4l -m

    2. 在从时钟开发板上执行以下脚本,用于接收来自主时钟的查询指令并返回时间戳:

      #!/bin/bashwhile truedo    ptp4l -S -A -P -H -r -s -N -p 2>&1 | grep "ptp4l"done

    这样,您就可以在主时钟开发板上通过 ptp4l 命令查询特定从时钟的时间戳,并在从时钟开发板上执行脚本以返回时间戳信息。

  2. 要在一个开发板上作为主时钟,而其他开发板作为从时钟,并获得从时钟与主时钟之间的时间误差,可以使用linuxptp工具和相应的命令。

    以下是一种可能的步骤:

    1. 首先,在主时钟的开发板上安装和配置linuxptp。确保网络连接正常并正确配置了时钟参考源(如GPS、PTP Grandmaster等)。

    2. 在主时钟开发板上,使用以下命令启动linuxptp以成为主时钟:

      sudo ptp4l -i  -m -H

      其中是网络接口的名称,例如eth0

    3. 在从时钟的开发板上,同样安装和配置linuxptp,并确保网络连接正常。

    4. 使用以下命令在从时钟开发板上将其连接到主时钟:

      sudo ptp4l -i  -s -m

      这将使从时钟与主时钟进行时间同步。

    5. 要获取从时钟与主时钟之间的时间误差,可以使用以下命令在从时钟开发板上:

      sudo phc2sys -s 

      其中是主时钟开发板的IP地址。执行此命令后,从时钟的开发板将显示与主时钟的时间误差。

    请确保主时钟和从时钟的开发板都能互相访问,并拥有正确的网络配置。此外,还应注意防火墙规则和网络延迟等因素可能会影响时间同步和误差计算的准确性

  3. 如果你想在主时钟下达一个指令返回当前从时钟与主时钟之间的时间误差,你可以尝试以下几种方法:

    • 如果你是使用 ptp4l 程序来运行 linuxptp,你可以在主时钟上使用 -m 选项来打印主从偏移量(offset from master)和路径延迟(path delay)等信息。例如,你可以使用以下命令:

      ptp4l -i eth0 -m

      这样,你就可以在标准输出中看到类似以下的输出:

      ptp4l[1234.567]: port 1: master offset -123 s0 freq +456 path delay 789

      这里的 master offset 就是从时钟相对于主时钟的时间误差,单位是纳秒。你也可以使用 -M 选项来打印更详细的信息,例如从时钟的 ID 和 IP 地址等¹。

    • 如果你是使用 phc2sys 程序来同步系统时钟,你可以在主时钟上使用 -m 选项来打印系统时钟和 PTP 硬件时钟(PHC)之间的偏移量(offset)和频率(frequency)。例如,你可以使用以下命令:

      phc2sys -s eth0 -w -m

      这样,你就可以在标准输出中看到类似以下的输出:

      phc2sys[1234.567]: [eth0] CLOCK_REALTIME phc offset -123 s0 freq +456 delay 789

      这里的 phc offset 就是系统时钟相对于 PHC 的时间误差,单位是纳秒。如果你想要知道从时钟相对于主时钟的时间误差,你需要在从时钟上也运行 phc2sys,并将两个偏移量相加。

    • 如果你想让作为从时钟的 Linux 开发板得知下发指令,你可以在主时钟上使用 ssh 或其他远程控制工具,来执行 ptp4l 或 phc2sys 的命令,并将输出重定向到从时钟的标准输入或文件中。例如,你可以使用以下命令:

      ssh slave@192.168.1.2 "ptp4l -i eth0 -m" > /dev/stdin

      这样,你就可以在从时钟上看到主时钟发送的指令和输出。

  4. 在Linuxptp中,可以使用ntpq命令查询时间同步状态和误差。

    首先,在主时钟上运行以下命令查询从时钟列表:

    sudo ntpq -p

    该命令将显示所有已配置的NTP服务器以及它们的状态。从时钟应该被列出并标记为“未同步”。

    接下来,在主时钟上运行以下命令来同步从时钟:

    sudo ntpdate pool.ntp.org

    其中,pool.ntp.org是一个公共NTP服务器池。您可以使用您自己的NTP服务器池。

    然后,在主时钟上运行以下命令来查看从时钟与主时钟之间的时间误差:

    sudo ntpq -p | grep "stratum"

    该命令将显示每个NTP服务器的时间戳、延迟和偏移量。从时钟应该被列出并标记为“未同步”,并且其偏移量应该为零。

    最后,在从时钟上运行以下命令来请求主时钟同步时间:

    sudo ntpdate master.example.com

    其中,master.example.com是主时钟的IP地址或主机名。从时钟应该被列出并标记为“已同步”。

    如果需要让从时钟得知下发指令,可以使用Linux系统的邮件通知功能。例如,在Ubuntu上,可以使用mailutils软件包发送电子邮件通知。在主时钟上运行以下命令来配置邮件通知:

    sudo nano /etc/ntp.conf

    在该文件中添加以下行:

    restrict default nomodify notrap nopeer noqueryrestrict -6 default nomodify notrap nopeer noqueryrestrict 127.0.0.1restrict -6 ::1

    这将限制NTP服务器只能响应来自本地主机的请求。保存并关闭文件后,重启NTP服务:

    sudo systemctl restart ntp

    现在,当从时钟请求时间同步时,它将收到一封包含同步命令的电子邮件通知。