良许Linux教程网 干货合集 Linux下调试1588单步时间戳报文

Linux下调试1588单步时间戳报文

最近我一直在为实现IEEE 1588单步时间戳的网络控制器驱动进行调试工作,经过多次调试,我终于完成了。在这里我也想顺便分享一下调试的方法。当然,如果你想玩1588的单步时间戳功能,首先需要有支持这个功能的硬件平台。如果你对1588报文的单步时间戳还不太了解,可以查看我之前写的文章《IEEE 1588 Sync报文单步时间戳》。

平台和工具

我使用的平台将不在此透露,测试时我使用了两块板子进行连接,通过直连方式连接了网口。我使用的软件包括:

  • Linux:这是我板子的操作系统,其中包含了我要验证的驱动程序。
  • tcpdump:这是一个位于板子文件系统中的抓包工具。
  • linuxptp:这是一个开源的PTP(Precision Time Protocol)软件,同样位于板子文件系统中。
  • Wireshark:这是一个在Windows电脑上使用的软件,用于查看抓包文件。

调试方法

  1. 将两个板子通过网口直连,并启动Linux操作系统。
  2. 配置IP地址,确保两个网口可以进行ping通。
  3. 将一个板子作为接收端,运行tcpdump抓包工具,可以直接查看抓包结果,也可以将结果保存为pcap文件,然后在Wireshark中打开进行查看。
  4. 将另一个板子作为发送端,运行ptp4l作为主设备,发送单步Sync报文。

通过以上调试方法,你就可以开始尝试使用IEEE 1588的单步时间戳功能了。祝好运!

发送方命令

使用L2 Ethernet协议,运行ptp4l做master,发送单步时间戳Sync报文

# ptp4l -i eth0 -m --twoStepFlag=0 -2
ptp4l[613.615]: selected /dev/ptp0 as PTP clock
ptp4l[613.652]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[613.653]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[619.801]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[619.802]: selected local clock 00e00c.fffe.001600 as best master
ptp4l[619.802]: port 1: assuming the grand master role

使用UDP/IPv4协议,运行ptp4l做master,发送单步时间戳Sync报文

# ptp4l -i eth0 -m --twoStepFlag=0
ptp4l[636.150]: selected /dev/ptp0 as PTP clock
ptp4l[636.152]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[636.153]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
ptp4l[643.497]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES
ptp4l[643.497]: selected local clock 00e00c.fffe.001600 as best master
ptp4l[643.497]: port 1: assuming the grand master role

接收方命令和结果

使用tcpdump直接查看接收报文完整的数据

# tcpdump -i eth0 -xx

可以看到对L2 Ethernet报文和UDP/IPv4报文,PTP消息的correctionField和originTimestamp字段的数值,直接就解析出来了

L2 Ethernet:

image-20231015153138581
image-20231015153138581

UDP/IPv4:

image-20231015153144239
image-20231015153144239

结束语

Sync报文发送的硬件时间戳应该是originTimestamp和correctionField相加。根据1588标准的规定,originTimestamp和实际发送硬件时间戳差值不能超过1s,所以对具体的硬件,如果originTimestamp是在发送报文前由软件填写的,那么一定要在填写后立即发送,使得correctionField不能超过1s。当前验证的硬件就是这种实现,所以correctionField在2us多,应该还是合理的。如果硬件做单步时间戳的同时,又支持回写时间戳,那就可以拿回写时间戳和单步时间戳(originTimestamp + correctionField)比较。如果相等,就说明硬件工作没有问题。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部