首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不正确的PTP时间戳

不正确的PTP时间戳
EN

Server Fault用户
提问于 2021-12-06 17:07:30
回答 1查看 431关注 1票数 1

我在使用PTP与Linux系统同步时遇到了困难。

设置:

两个带有BegleCore模块和DP83640物理层的多氯联苯通过以太网相互连接。一个董事会应充当PTP的主人,另一个应充当奴隶。Debian 10,内核: 4.19.94驱动程序的Phy被加载。使用linuxptp v3.1

在主系统上,我运行以下命令:

代码语言:javascript
运行
复制
sudo ptp4l -i eth0 -f linuxptp/configs/configMaster.cfg -m

在我运行的客户端系统上:

代码语言:javascript
运行
复制
sudo ptp4l -i eth0 -f linuxptp/configs/configslave.cfg -m

ConfigMaster.cfg的内容:

代码语言:javascript
运行
复制
[global]
serverOnly       1
BMCA             noop

ConfigSlave.cfg的内容:

代码语言:javascript
运行
复制
[global]
clientOnly      1
BMCA            noop
step_threshold  1

这将在从服务器上产生以下输出:

代码语言:javascript
运行
复制
ptp4l[438753.396]: selected /dev/ptp0 as PTP clock
ptp4l[438753.409]: port 1 (eth0): INITIALIZING to SLAVE on INIT_COMPLETE
ptp4l[438753.414]: port 0 (/var/run/ptp4l): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[438753.418]: port 0 (/var/run/ptp4lro): INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[438754.075]: port 1 (eth0): new foreign master 304511.fffe.0ff048-1                                                                                       
ptp4l[438758.074]: selected best master clock 304511.fffe.0ff048
ptp4l[438762.072]: master offset 2426120726467 s0 freq -261066 path delay     15040
ptp4l[438762.074]: selected best master clock 304511.fffe.0ff048
ptp4l[438765.074]: master offset 2426120697575 s1 freq -270698 path delay     15156
ptp4l[438767.072]: master offset 2426120678191 s0 freq -270698 path delay     15156
ptp4l[438768.075]: master offset 2426120668273 s1 freq -280618 path delay     15830
ptp4l[438769.072]: master offset 2426120658469 s0 freq -280618 path delay     15830
ptp4l[438770.073]: master offset 2426120648789 s0 freq -280618 path delay     16022
ptp4l[438771.076]: master offset 2426120639057 s1 freq -290350 path delay     16022
...

报道的偏移量约为40分钟。在运行ptp4l之前,我已经用testptp -s将PHYs中的PTP时钟设置为当前系统时间。因此,PTP时钟实际上是在几秒钟内彼此之间的。

每次ptp4l报告一个“主偏移量s1 .”它确实使PTP时钟倒退了40分钟(用testptp -g检查)。然而,这一报道只抵消了大约10美元的变化。

我还用Wireshark查看了网络流量,并看到来自主机的后续消息包含一个时间戳,大约是PHY中PTP时钟设置的69分钟。在向ptp4l添加调试输出后,我看到,在从套接字返回的cmsgs中提取的时间戳上,它从从套接字返回的cmsgs中提取的时间戳与客户端PTP时钟的实际值相差约-27分钟。

与主时钟发送的假时间戳(+69分钟)和客户端错误读取时间戳(-27分钟)的差异导致主时钟和客户端时钟之间假定偏移时间为40分钟。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2021-12-09 09:16:52

我解决了以下问题:禁用内核选项中的CPTS支持,并以下列方式修改文件cpsw.c:

代码语言:javascript
运行
复制
diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/cpsw.c
index fc8e3ed383a2..d4d70706e86c 100644
--- a/drivers/net/ethernet/ti/cpsw.c
+++ b/drivers/net/ethernet/ti/cpsw.c
@@ -2490,15 +2490,22 @@ static int cpsw_ndo_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
struct cpsw_priv *priv = netdev_priv(dev);
struct cpsw_common *cpsw = priv->cpsw;
int slave_no = cpsw_slave_index(cpsw, priv);
+ int err = 0;

if (!netif_running(dev))
return -EINVAL;

switch (cmd) {
case SIOCSHWTSTAMP:
- return cpsw_hwtstamp_set(dev, req);
+ err = cpsw_hwtstamp_set(dev, req);
+ if(err != -EOPNOTSUPP)
+ return err;
+ break;
case SIOCGHWTSTAMP:
- return cpsw_hwtstamp_get(dev, req);
+ err = cpsw_hwtstamp_get(dev, req);
+ if(err != -EOPNOTSUPP)
+ return err;
+ break;
case SIOCSWITCHCONFIG:
return cpsw_switch_config_ioctl(dev, req, cmd);
}
票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/1085555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档