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.

[参考译文] AM62A3:无法通过 ioctl 写入硬件时间戳参数。

Guru**** 2475200 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1460400/am62a3-failed-to-write-hardware-timestamp-parameters-through-ioctl

器件型号:AM62A3

工具与软件:

在硬件时间戳的初始化期间、ioctl 无法写入硬件时间戳参数。 TX_TYPE 为 HWTSTARP_TX_ON、Rx_FILTERS 为 HWTSTARP_FILTER_PTP_V2_EVENT。 使用 linuxPTP 开源协议栈 v4.2版本时发生以下错误、发生以下错误:

ptp4l[6.307]:选择/dev/ptp0作为 PTP 时钟
ptp4l[6.364]:设置 HWTSTARP:TX_TYPE = 1、Rx_FILTER = 12
ptp4l[6.364]:驱动程序拒绝了大多数常规 HWTSTARMP 滤波器
ptp4l[6.364]:设置具有 Rx_FILTER = 12的 HWTSTARP 失败:无效参数
ptp4l[6.364]:使用备用 Rx_FILTER = 9重试
ptp4l[6.364]:ioctl SIOCSHHWTSTARP 失败:参数无效
ptp4l[6.416]:端口1 (eth0):在 FAULT_DETECTED 上初始化为 FAULT_DEFAULT (FT_UNSPECIFIED)
ptp4l[6.416]:端口0 (/var/run/ptp4l):正在初始化以侦听 init_complete
ptp4l[6.417]:端口0 (/var/run/ptp4lro):正在初始化以侦听 INIT_COMPLETE

相关代码如下所示、sk.c/HWTS_init

案例 HWTS_FILTER_NORMAL:
    cfg.tx_type  = TX_type
    cfg.rx_filter = orig_rx_filter = rx_filter

    PR_INFO ("设置 HWTSTARP:TX_TYPE =%d、Rx_FILTER =%d"、cfg.TX_TYPE、cfg.Rx_FILTER);

    Err = ioctl (FD、SIOCTHWTSTARP、&ifreq);
    如果(err < 0){
      PR_INFO ("驱动程序已拒绝大多数通用 HWTSTARP 过滤器");

      pr_err ("设置 HWTSTARP 失败、rx_filter =%d%m"、orig_rx_filter);

      init_ifreq (&ifreq&cfg、device);
      cfg.tx_type  = TX_type
      cfg.rx_filter = orig_rx_filter = rx_filter2

      pr_info ("使用备用 rx_filter 重试=%d"、orig_rx_filter);

      Err = ioctl (FD、SIOCTHWTSTARP、&ifreq);
      如果(err < 0){
        pr_err ("ioctl SIOCSNHWTSTARP Failed:%m");
        return 错误;
      }
    }
    如果(cfg.rx_filter == HWTSTARP_FILTER_SOMER)
      cfg.rx_filter = orig_rx_filter;
    休息
  }
以下参数是使用 ethtool 获得的
root@am62axx-evm:~# ethtool -T eth0
eth0的时间戳参数:
功能:
硬件传输
软件发送
硬件接收
软件接收
软件系统时钟
硬件原始时钟
PTP 硬件时钟:0
硬件传输时间戳模式:
出错
提供中断
硬件接收滤波器模式:

ptpv2-L4-event
ptpv2-L4-sync
ptpv2-L4-delay-req
ptpv2-l2-事件
ptpv2-l2-sync
ptpv2-l2-delay-req
ptpv2 -事件
ptpv2-sync
ptpv2-delay-req
root@am62axx-evm:/tmp# ethtool -i eth0
驱动程序:am65-cpsw-nuss
版本:6.6.6.6.32-ti-ge204a3987642
固件版本:
EXPANSION-ROM-VERSION:
bus-info: 8000000.ethernet
支持统计:是
支持测试:不支持
支持 EEPROM 访问:否
支持 REGISTER-DUMP:是的
supports-priv-FLAGS:可以

根据上述信息、您能告诉我故障信息吗? 我认为设置的参数在支持范围内

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

    您好!

    首先可以回答以下问题

    1.您使用的 Linux SDK 版本是什么?

    2.该测试是在定制电路板还是 TI AM62Ax EVM 上运行?

    3.您的测试设置是什么? 通过以太网连接了多少个设备?它们是如何连接的?

    4.您用于运行测试的具体分步过程是什么? (包括对代码所做的任何更改)

    5.您使用什么命令来运行 linuxptp (您使用的 ptp4l 选项是什么)?

    -道林

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

    1.您使用的 Linux SDK 版本是什么?

    --> root@am62axx-evm:~# cat /etc/os-release
    ID=
    NAME="Arago"
    VERSION="2023.10"
    version_ID=2023.10
    版本代码名称="${distro_codename}"
    Prety_name="Arago 2023.10"
    cpe_name="cpe:/o:openembedded:Arago:2023.10"

    root@am62axx-evm:~# uname -r
    6.6.32-ti-ge204a3987642

    root@am62axx-EVM:~# cat /proc/version
    Linux 版本6.6.6.32-ti-ge204a3987642 (OE-user@OE-host)(AArch64-OE-Linux-gcc (GCC) 13.3.0、GNU ld (GNU binutils) 2.42.0.20240620)#1 SMP 抢占 Thu Jan 2 21:15:22 UTC 2025

    2.该测试是在定制电路板还是 TI AM62Ax EVM 上运行?

    --> 定制板

    3.您的测试设置是什么? 通过以太网连接了多少个设备?它们是如何连接的?

    --> 目前,一个设备被用作 gPTP 从设备节点,根据 Linuxptp 版本4.2 ,配置文件为 automotive-slave.cfg ,配置如下:

    #
    #汽车配置文件示例配置的客户端包含这些
    #与默认值不同的属性。  有关、请参阅文件 default.cfg
    #可用选项的完整列表。
    #
    [全局]
    #
    #选项从 gPTP 转移。
    #
    可编程1.    
       第248章一个条件
       第248章一个条件
    logSyncInterval  -3
    syncReceiviptTimeout 3.
    第八十章800
    MIN_ALIANCE_PROP_DELAY -20000000
    assume_two_step  1
    PATH_TRACE_ENABLED 1
    Follow-up_info   1.
    传输规格 0x1
    PTP_DST_MAC  01:80:C2:00:00:0E
    network_transfer L2
    DELAY_机制  E2E
    #
    #汽车规范特定的选项
    #
    BMCA       NOOP
    只有客户端   1
    禁止宣布  1
    不可加载        对
    ignore_source_id  1
    #需要快速纠正主器件中的时间跳变
    STEP_THRESHOLD      1.
    OperLogSyncInterval  -3.
    logMinPdelayReqInterval 0
    OperLogPdelayReqInterval 0
    MSG_INTERVAL_REQUEST  1
    SERVO_OFFSET_THRESHOLD 30
    servo_num_offset_values 10.
     
    两个设备通过以太网相互连接。 一个用作主 gPTP 器件、另一个用作辅助 gPTP 器件

    4.您用于运行测试的具体分步过程是什么? (包括您对代码所做的任何更改)?

    --> 除上述配置文件外、linuxptp 协议栈代码没有发生太大变化、也没有特殊的测试程序、即 ioctl 无法写入硬件时间戳参数

    5.您使用什么命令来运行 linuxptp (您使用的 ptp4l 选项是什么)?

    --> usr/sbin/ptp4l -f etc/linuxptp/ptp4l.conf -i eth0 -m -H

       

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

    您好!

    感谢您回答这些问题。 如果我理解正确、您使用的是 Linux 内核6.6 (不一定是 TI Linux SDK 10.1提供的)、并且使用的是单独构建的 ptp4l 堆栈?  

    您是否可以尝试验证以下 linuxptp 设置在您的 系统上运行?

    运行"ptp4l -P -2 -H -I eth0 -f gPTP.cfg --step_threshold=1 -m -q -p /dev/ptp0、其中 gPTP.cfg 在用作主时钟的设备上包含以下内容? 对于遵循主时钟的器件、将 gPTP.cfg 中的"priority1"更改为240。

    # 802.1AS example configuration containing those attributes which
    # differ from the defaults. See the file, default.cfg, for the
    # complete list of available options.
    #
    [global]
    gmCapable 1
    priority1 100
    priority2 248
    logAnnounceInterval 0
    logSyncInterval -3
    syncReceiptTimeout 3
    neighborPropDelayThresh 800
    min_neighbor_prop_delay -20000000
    assume_two_step 1
    path_trace_enabled 1
    follow_up_info 1
    transportSpecific 0x1
    ptp_dst_mac 01:80:C2:00:00:0E
    network_transport L2
    delay_mechanism P2P
    ingressLatency 88
    egressLatency 288

    两台设备通过以太网相互连接。 一个用作主 gPTP 器件、另一个用作辅助 gPTP 器件[/报价]

    我假设通过以太网连接的两个器件都是定制电路板?

    -道林

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

    虽然通过 ioctl 写入硬件时间戳没有失败、但时间同步也不会成功

    服务:



    客户:


    我假设通过以太网连接的两个器件都是定制电路板?

    -->是的、  您使用的是 Linux 内核6.6、 从 TI Linux SDK 10.1开始、基本上没有任何更改、而 linuxPTP 协议栈也直接使用发行版本、没有进行任何其他代码更改

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

    您好!

    [报价 userid="576780" url="~/support/processors-group/processors/f/processors-forum/1460400/am62a3-failed-to-write-hardware-timestamp-parameters-through-ioctl/5605904 #5605904"]运行"ptp4l -P -2 -H -i eth0 -f gPTP.cfg --step_threshold=1 -m -q -p /dev/ptp0其中 gPTP.cfg 在用作 grandmaster 时钟的设备上包含以下内容? 对于遵循主时钟的器件、将 gPTP.cfg 中的"priority1"更改为240。[/QUOT]

    我假设"服务"输出来自 PTP 主站设备? 如果是、则应确保"priority1"配置为100。 从器件应为240。

    仅仅说明一下、两个连接的器件都是通过各自的"eth0"端口连接的?

    您是否可以在两个设备的 eth0接口上执行 tcpdump、并查看是否看到预期的 PTP 消息(例如 Peer_Delay_Req)?

    -道林

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

    谢谢你的支持,我理解。 目前的问题已经解决

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

    您好!  

    很高兴听到问题得到解决。 作为此线程的未来读者参考、您能分享一些有关问题是如何解决的信息吗?

    -道林

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

    当在服务文件中定义时、您需要将用户和组权限设置为 root、否则加载配置文件时可能会出现问题、例如 ioctl 写入硬件时间戳错误