This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA4VM:Linux 中 j721e 获取 gPTP 时间戳错误

Guru**** 2538950 points
Other Parts Discussed in Thread: AM6442

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1237600/tda4vm-j721e-get-gptp-timestamp-error-with-linux

器件型号:TDA4VM
主题中讨论的其他器件:AM6442

尊敬的 TI:

在 Linux 内核版本:ti-processor-sdk-linux-rt-j7-evm-08_02_00_01/board-support/linux-rt-5.10.100中,我们使用两个 J721E EVM 板运行 gPTP 堆栈,这样可以将 eth0 硬件时间戳从主站对齐到从站;

但六小时后,无法获得正确的 硬件时间戳(我们测试了更多次,可以重复运行超过六小时);

例如:  现在得到的硬件时间戳是22414217445338ns、  但125ms 后、 得到的 硬件时间戳是 165468795132214838、 这是异常的。  获取时间戳的代码如下所示:

  param.fd = IFA->FD[IFA->fdType];
   param.buf = buf;
   param.buflen = len;
   param.use_swts = ifa->use_swts;
   param.timestamp =时间戳(&T);
   param.flags = MSG_DONTWAIT;

   (void) memset (control、0、sizeof (control));
   (void) memset (&msg、0、sizeof (msg));
   MSG.msg_name =&ss;
   MSG.msg_namelen = sizeof (ss);
   MSG.msg_IOV =&IOV;
   MSG.msg_iovlen = 1;
   MSG.msg_control =控制;
   MSG.msg_controllen = sizeof (control);

   cnt =(int) recvmsg (param->fd、&msg、param->flags);
   如果(cnt <0){
       GPTP_ERR("recvmsg%sailed,fd %d:%m",(param->flags == MSG_ERRQUEUE)? " TX 时间戳":"",param->fd);
       返回-3;
   }
   对于(cm = CMSG_FIRSTHDR (&msg);cm!= NULL;cm = CMSG_NXTHDR (&msg、cm)){
       水平= cm->CMSG_LEVEL;
       类型 = cm->CMSG_TYPE;
       if (SOL_SOCKET ==电平&& SO_TIMEPOINT ==类型){
           如果(cm->CMSG_len < sizeof (* ts)* 3){
               GPTP_WARN ("Short SO_timestamp message");
               返回-EMSGSIZE;
           }
           TS =(struct timespec *) CMSG_DATA (cm);
       }
   }

   如果(!ts){
       返回 cnt;
   }
   if (param->use_swts){
       (void) memcpy (param->timestamp、&ts[0]、sizeof (struct timespec));
   }
   否则{
       (void) memcpy (param->timestamp、&ts[2]、sizeof (struct timespec);
   }

我们还进行其他测试:1、在 AM6442板上运行相同的 gPTP 堆栈代码超过6小时 (AM6442 Linux 内核与 J721 EVM 板相同)、 这是正常现象;  

2.我们使用相同的 J721 EVM 板来运行 gPTP 堆栈,但使用 QNX 版本超过六个小时,  这 也是正常的。

因此、我们认为 Linux 内核 eth0 mac 驱动程序可能有某种溢出? 您遇到同样的问题吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    要在 Linux 上测试 PTP、我们使用 linuxptp 库。 详细信息记录在以下位置: https://software-dl.ti.com/jacinto7/esd/processor-sdk-linux-jacinto7/08_06_01_02/exports/docs/linux/Foundational_Components/Kernel/Kernel_Drivers/Network/CPSW-PTP.html

    我不确定您使用的是哪个 gPTP 堆栈?

    您能否浏览上述文档、看看您是否有不同之处。

    此致、
    坦迈

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好:

    我们测试使用 ptp4l、添加一些如下所示的日志: 与我们的 gPTP 堆栈相同、大约7小时的 port1链路上下  移动;因此我们停止 ptp4l、因为时间戳偏移   -7274961116是异常  的;如果我们不停止 PTP、ptp4l 可以再次从主站同步。  

    ptp4l_exit[27987.959]:主偏移1 S3 freq +496 path delay 410
    ptp4l_exit[27988.083]:主偏移1 S3 freq +496 path delay 410
    ptp4l_exit[27988.209]:主偏移8 S3 freq +506路径延迟409
    ptp4l_exit[27988.334]:主偏移4 S3 freq +502路径延迟410
    ptp4l_exit[27988.459]:主偏移5 S3 freq +504路径延迟410
    ptp4l_exit[27988.584]:主偏移4 S3 freq +503路径延迟410
    ptp4l_exit[27988.709]:主偏移2 S3 freq +500路径延迟409
    ptp4l_exit[27988.834]:主偏移11 S3 freq +514路径延迟409
    ptp4l_exit[27988.959]:主设备偏移7 S3 freq +509路径延迟409
    ptp4l_exit[27988.970]:轮询 TX 时间戳时超时
    ptp4l_exit[27988.971]:增大 TX_TIMESTAMP_TIMEOUT 可能会纠正此问题,但它可能是由驱动程序错误导致的
    ptp4l_exit[27988.971]:端口1 (eth0):发送对等延迟请求失败
    ptp4l_exit[27988.971]:端口1 (eth0):FAULT_DETECTED (FAULT_DETECTED)上从器件到故障(FT_UNSPECIFIC)
    ptp4l_exit[27989.012]:端口1 (eth0):链路断开
    ptp4l_exit[27989.012]:选择本地时钟247625.FFFE.96226f 作为最佳主时钟
    ptp4l_exit[28000.608]:端口1 (eth0):链路接通
    ptp4l_exit[28000.640]:端口1 (eth0):INIT_COMPLETE 上的从器件发生故障
    ptp4l_exit[28000.888]:主偏移-287 S3 freq +88路径延迟409
    ptp4l_exit[28000.900]:recvmsg TX timestamp 失败:资源暂时不可用
    ptp4l_exit[28000.900]:端口1 (eth0):发送对等延迟请求失败
    ptp4l_exit[28000.900]:端口1 (eth0):FAULT_DETECTED (FAULT_DETECTED)上的从器件到故障(FT_UNSPECIFIC)
    ptp4l_exit[28000.936]:端口1 (eth0):链路断开
    ptp4l_exit[28008.035]:端口1 (eth0):链路建立
    ptp4l_exit[28008.068]:端口1 (eth0):init_complete 上从器件发生故障
    ptp4l_exit[28008.171]:主偏移-7274961116 s0 freq +88路径延迟409
    ptp4l_exit[28008.171]:33333 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 错误

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    很抱歉耽误你的时间。

    您能否提供两边使用的 ptp.cfg 以及所使用的确切命令? 我将尝试重复这个问题。

    我还想确认的一点是、您是否也使用非 RT Linux 尝试过此功能? 或者该问题是否只出现在 RT-Linux 中? 这可能也是非 RT 与 RT 问题。

    此致、
    坦迈

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是。 非 RT Linux 

    ./ptp4l -i swp3 -f configs/automotive-master.cfg -m

    ./ptp4l -i swp3 -f configs/automotive-slave.cfg -m

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    您是否还可以提供使用的配置、以便我能够尽可能重现问题。

    此外、使用的接口 swp3、它是与 CPSW 连接的以太网接口吗? 您是否正在使用 CPSW2G 或 CPSW9G?

    此致、
    坦迈  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    ptp4l -i eth0、      使用 CPSW2G;

    和-f configs 文件,如下所示,

    automotive-master.cfg:

    #
    #汽车配置文件示例配置主机包含这些
    #与默认值不同的属性。 请参阅文件 default.cfg、以了解
    #可用选项的完整列表。
    #
    [全局]
    #选项从 gPTP 转移。
    可编程 Capable 1
    优先级1 248
    优先级2 248
    logSyncInterval - 3
    syncreceiptTimeout 3
    邻居 DelayThresh 800
    最小_neighbor_prop_delay -20000000
    假定_两个_步骤1
    PATH_TRACE_ENABLED 1
    跟踪_up_info 1
    运输规格0x1
    PTP_DST_Mac 01:80:C2:00:00:0E
    网络传输 L2
    延迟机制 P2P
    #
    #汽车配置文件特定选项
    #
    BMCA NOOP
    服务器仅1
    禁止通知1
    无 Capable true
    INHIBIT_DELAY_REQ 1

    automotive.cfg:

    #
    #汽车配置文件示例配置客户端包含这些
    #与默认值不同的属性。 请参阅文件 default.cfg、以了解
    #可用选项的完整列表。
    #
    [全局]
    #
    #选项从 gPTP 转移。
    #
    可编程 Capable 1
    优先级1 248
    优先级2 248
    logSyncInterval - 3
    syncreceiptTimeout 3
    邻居 DelayThresh 800
    最小_neighbor_prop_delay -20000000
    假定_两个_步骤1
    PATH_TRACE_ENABLED 1
    跟踪_up_info 1
    运输规格0x1
    PTP_DST_Mac 01:80:C2:00:00:0E
    网络传输 L2
    延迟机制 P2P
    #
    #汽车配置文件特定选项
    #
    BMCA NOOP
    仅客户端1
    禁止通知1
    无 Capable true
    ignore_source_id 1
    #需要快速校正主站中的时间跳转
    STEP_THRESHOLD 1
    OperLogSyncInterval 0
    OperLogPdelayReqInterval 2
    MSG_INTERVAL_REQUEST 1
    SERVO_OFFSET_THRESHOLD 30
    SERVO_NUM_OFFSET_VALUES 10