最近我一直在为实现IEEE 1588单步时间戳的网络控制器驱动进行调试工作,经过多次调试,我终于完成了。在这里我也想顺便分享一下调试的方法。当然,如果你想玩1588的单步时间戳功能,首先需要有支持这个功能的硬件平台。如果你对1588报文的单步时间戳还不太了解,可以查看我之前写的文章《IEEE 1588 Sync报文单步时间戳》。
平台和工具
我使用的平台将不在此透露,测试时我使用了两块板子进行连接,通过直连方式连接了网口。我使用的软件包括:
-
Linux:这是我板子的操作系统,其中包含了我要验证的驱动程序。 -
tcpdump:这是一个位于板子文件系统中的抓包工具。 -
linuxptp:这是一个开源的PTP(Precision Time Protocol)软件,同样位于板子文件系统中。 -
Wireshark:这是一个在Windows电脑上使用的软件,用于查看抓包文件。
调试方法
-
将两个板子通过网口直连,并启动Linux操作系统。 -
配置IP地址,确保两个网口可以进行ping通。 -
将一个板子作为接收端,运行tcpdump抓包工具,可以直接查看抓包结果,也可以将结果保存为pcap文件,然后在Wireshark中打开进行查看。 -
将另一个板子作为发送端,运行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:
UDP/IPv4:
结束语
Sync报文发送的硬件时间戳应该是originTimestamp和correctionField相加。根据1588标准的规定,originTimestamp和实际发送硬件时间戳差值不能超过1s,所以对具体的硬件,如果originTimestamp是在发送报文前由软件填写的,那么一定要在填写后立即发送,使得correctionField不能超过1s。当前验证的硬件就是这种实现,所以correctionField在2us多,应该还是合理的。如果硬件做单步时间戳的同时,又支持回写时间戳,那就可以拿回写时间戳和单步时间戳(originTimestamp + correctionField)比较。如果相等,就说明硬件工作没有问题。
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !