转自:ptpd编译部署指南
本指南主要用来指导程序员如何开展ptpd编译、部署、运行等基本操作。
1、概念介绍
gPTP是generalized Precision Time Protocol的缩写,基于IEEE 802.1 as。ptpd是基于IEEE 1588v2协议进行了一系列优化,形成了更具有针对性的时间同步机制,可以实现μs级的同步精度。AE内如果部署了ptpd,可以实现汽车内全部ECU的时间精准同步,这是确保ADAS安全可靠运行的基础。
从官方的角度解释:
IEEE 802.1AS-2011是IEEE 1588-2008的profile
IEEE 802.1AS-2020是IEEE 1588-2019的profile
注:本文不对标准进行解读,这里不展开了。1588与802.1 as更多的区别可以去互联网上找到,如https://blog.csdn.net/yanceylu/article/details/114829053。
2、POSIX下ptpd及gPTP开源代码
目前POSIX开源的代码一共找见三套,如下:
2.1、ptpd
官网及git URL
http://ptpd.sf.net
git clone https://github.com/ptpd/ptpd.git
ptpd更新时间数据报文是被封装在IP包在以太网的上层(如2/3/4层)基于IEEE-1588v2协议定义,这里如同ptpd-avb的时间更新报文是直接在以太网层基于IEEE-802.as 协议定义。IEEE-1588v2使用更为广泛更利于普及,有边界时钟普通时钟等。源代码是在BSD-style license下可以自由地使用。
QNX 7.0自带ptpd,目前测试ptpd可以在ubuntu、tbox、fcs、IVI上组网运行,运行结果相当不错。
2.2、linuxptp
官网及git URL
http://linuxptp.sourceforge.net
git clone git://git.code.sf.net/p/linuxptp/code linuxptp
这份代码可以覆盖:
The automotive profile
The default 1588 profile.
The enterprise profile.
The telecom profiles G.8265.1, G.8275.1, and G.8275.2.
但是,这份代码是需要kernel 3.0以上,另外对于PHY有要求。
软时钟:
SOF_TIMESTAMPING_SOFTWARE
SOF_TIMESTAMPING_TX_SOFTWARE
SOF_TIMESTAMPING_RX_SOFTWARE
硬时钟:
SOF_TIMESTAMPING_RAW_HARDWARE
SOF_TIMESTAMPING_TX_HARDWARE
SOF_TIMESTAMPING_RX_HARDWARE
目前测试,只有ubuntu使用软时钟可以跑起来,tbox及fcs都无法跑起来。
2.3、gptpd
官网及git URL
https://github.com/induarun9086/gPTPd
git clone https://github.com/induarun9086/gPTPd.git
这份代码覆盖:IEEE 802.1 as (gPTP)
这份代码可以编译,但是是需要硬时钟支持。
综上,是推荐使用ptpd。
3、编译ptpd
3.1、ubuntu
$cd ptpd-master
$.autoreconf -vi
$./configure
$make
编译完成后,src下面有ptpd2,可以直接运行
3.2、tbox(EC20)
$source ~/tbx_eth/ql-ol-crosstool/ql-ol-crosstool-env-init
$cd ptpd-master
$.autoreconf -vi
$./configure --host=arm-oe-linux-gnueabi
$make
编译完成后,src下面有ptpd2,scp到T-Box的/usrdata/foton/bin下面即可运行
注意:因为configure里面有对malloc重新定义了,所以vi config.h.in将#undef malloc屏蔽后再编译。
3.3、fcs(Amb)
$source ~/Ambarella_SDK_2.5.8/foton_prebuilts/envsetup
$cd ptpd-master
$.autoreconf -vi
$./configure --host=aarch64-linux-gnu
$make
编译完成后,src下面有ptpd2,scp到fcs的/foton/app/bin下面即可运行
注意:因为configure里面有对malloc重新定义了,所以vi config.h.in将#undef malloc屏蔽后再编译。
3.4、IVI(qnx)
$source ~/qnx660/qnx660-env.sh
$cd ptpd-master
$.autoreconf -vi
$./configure --host=arm-unknown-nto-qnx6.6.0eabi --enable-experimental-options
$make
编译完成后,src下面有ptpd2,scp到IVI的/dos下面即可运行
注意:因为configure里面有对malloc重新定义了,所以vi config.h.in将#undef malloc屏蔽后再编译。
4、部署运行
ptpd2可以自行投票决定谁做master谁做slave,当然也可以强制指定。本案选择投票自行决定master和slave,分别在tbox、fcs、IVI、ubuntu进行部署运行,操作指令很简单,但是一定都要有root权限。
#ptpd2 -i eth0 -V -m -d 0
-i 指定网卡
-V 指定verbose模式,若不想打印log和前台运行,可以不选择该选项,进入daemon
-m 投票自行决定master和slave
-d 知道域识别号
T-Box运行截图如下:
如截图所示,经PTP投票T-Box获得PTP_MASTER权限,其他设备都自动与T-Box对时。
其他设备运行截图如下:
如截图所示,经PTP投票该设备获得PTP_SLAVE权限,该设备自动与T-Box对时。
测试:可以在T-Box上使用date命令修改T-Box本地时钟,然后观察其他设备是否能及时对时到T-Box的时间。
5、wireshark抓包分析
T-Box使用tcpdump抓包,使用wireshark抓包可以看到PTPv2协议及Sync、Delay_Req、Announce等对时命令,截图如下: