开发者社区 > 物联网 > 正文

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

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

展开
收起
qkgco5qbescfs 2023-10-08 10:49:00 373 0
6 条回答
写回答
取消 提交回答
  • 要实现这个功能,你需要在主时钟上运行一个NTP服务器,然后在其他三个从时钟上运行NTP客户端来同步时间。当主时钟下达指令时,NTP客户端会返回与主时钟之间的时间误差。以下是具体步骤:

    1. 在四个Linux开发板上安装ntp软件包:

      sudo apt-get update
      sudo apt-get install ntp
      
    2. 配置主时钟(假设为开发板1)作为NTP服务器:
      编辑/etc/ntp.conf文件,添加以下内容:

      server 192.168.1.1 iburst
      

      其中,192.168.1.1是主时钟的IP地址。保存并退出。

    重启NTP服务:

    sudo systemctl restart ntp
    
    1. 在主时钟上安装和配置NTP客户端:

      sudo apt-get install ntpdate
      

      创建一个脚本sync_time.sh,内容如下:

      #!/bin/bash
      while true; do
      date=$(ntpdate -q pool.ntp.org | awk '{print $4,$5,$6,$7}')
      echo "当前时间:${date}"
      # 在这里添加你的指令,例如发送邮件、短信等
      sleep 60
      done &
      

      给脚本添加可执行权限:

      chmod +x sync_time.sh
      

      运行脚本:

      ./sync_time.sh &
      

      这将使主时钟每分钟同步一次时间。你可以根据需要调整同步间隔。

    2. 在其他三个开发板上配置NTP客户端并同步时间:
      编辑/etc/ntp.conf文件,删除所有行或保留与主时钟相同的服务器配置。保存并退出。
      重启NTP服务:

      sudo systemctl restart ntp
      

      运行脚本sync_time.sh,使从时钟与主时钟同步时间。

    2023-10-12 09:13:30
    赞同 展开评论 打赏
  • 要基于 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/bash
      while true
      do
          ptp4l -S -A -P -H -r -s -N -p 2>&1 | grep "ptp4l"
      done
      

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

    2023-10-09 09:06:26
    赞同 展开评论 打赏
  • 要让主时钟下达一个指令返回当前从时钟与主时钟之间的时间误差,并让作为从时钟的Linux开发板得知下发指令,可以使用以下步骤:

    1. 在主时钟上,使用nptpq命令获取主时钟的IP地址。例如:nptpq -p 600 -n -o address main,其中main是主时钟的名称。
    2. 在主时钟上,编写一个脚本,该脚本使用nptpq命令获取主时钟和从时钟之间的对等关系,并使用ntpquery命令获取主时钟和从时钟之间的对等关系的当前状态。例如:
    #!/bin/bash
    
    # 获取主时钟的IP地址
    main_ip=$(nptpq -p 600 -n -o address main)
    
    # 获取主时钟和从时钟之间的对等关系
    peer=$(nptpq -p 600 -n -o peer main)
    
    # 获取主时钟和从时钟之间的对等关系的当前状态
    status=$(ntpquery -v -s $main_ip -u $peer -w 30 -n)
    
    # 输出时间误差
    echo "主时钟和从时钟之间的时间误差为:$status"
    

    将该脚本保存为get_time_error.sh,并赋予执行权限:chmod +x get_time_error.sh

    1. 在从时钟上,编写一个脚本,该脚本使用nc命令监听主时钟的端口,并接收主时钟的指令。例如:
    #!/bin/bash
    
    # 监听主时钟的端口
    nc -l 50000
    
    # 接收主时钟的指令
    while true
    do
        echo "等待接收指令..."
        read cmd
    
        # 根据指令执行相应的操作
        case $cmd in
            "get_time_error")
                /path/to/get_time_error.sh
                ;;
            *)
                echo "未知指令:$cmd"
                ;;
        esac
    done
    

    将该脚本保存为receive_cmd.sh,并赋予执行权限:chmod +x receive_cmd.sh

    1. 在主时钟上,使用scp命令将get_time_error.sh脚本上传到从时钟上,并赋予执行权限:scp get_time_error.sh user@from_ip:/path/to/
    2. 在从时钟上,使用nc命令监听主时钟的端口,并接收主时钟的指令。例如:nc -l 50000
    3. 在主时钟上,执行get_time_error.sh脚本,并将结果发送到从时钟上。例如:ssh user@from_ip 'bash /path/to/receive_cmd.sh "get_time_error"'
    2023-10-08 13:04:56
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

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

    以下是一种可能的步骤:

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

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

      sudo ptp4l -i <network-interface> -m -H
      

      其中<network-interface>是网络接口的名称,例如eth0

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

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

      sudo ptp4l -i <network-interface> -s -m
      

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

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

      sudo phc2sys -s <master-ip-address>
      

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

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

    2023-10-08 12:48:33
    赞同 展开评论 打赏
  • 如果你想在主时钟下达一个指令返回当前从时钟与主时钟之间的时间误差,你可以尝试以下几种方法:

    • 如果你是使用 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

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

    2023-10-08 11:45:19
    赞同 1 展开评论 打赏
  • 月移花影,暗香浮动

    在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 noquery
    restrict -6 default nomodify notrap nopeer noquery
    restrict 127.0.0.1
    restrict -6 ::1
    

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

    sudo systemctl restart ntp
    

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

    2023-10-08 11:11:39
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:

物联网领域前沿技术分享与交流

相关电子书

更多
Alibaba Cloud Linux 3 发布 立即下载
ECS系统指南之Linux系统诊断 立即下载
ECS运维指南 之 Linux系统诊断 立即下载