The newer protocol is the Precision Time Protocol (PTP), which is defined in the IEEE 1588-2008 standard.PTP was designed for local networks with broadcast/multicast transmission and, in ideal conditions, the system clock can be synchronized with sub-microsecond accuracy to the reference time.
需要在IMX8QXP板子上面验证PTP局域网时间戳同步,板子上面有AR8031工业以太网和88Q2110车载以太网。
PTP硬件支持查看AR8031 PHY的手册,支持PTP功能:
查看88Q2110 PHY手册也支持PTP:
使用ethtool工具查看网卡支持的同步类型,都支持软件和硬件时钟同步。
root@genvict_imx8qxp:~# ethtool -T eth0【ar8031】 Time stamping parameters for eth0: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 0 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) all (HWTSTAMP_FILTER_ALL) root@genvict_imx8qxp:~# root@genvict_imx8qxp:~# ethtool -T eth1【88q2110】 Time stamping parameters for eth1: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 1 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) all (HWTSTAMP_FILTER_ALL)PTP软件支持
在yocto项目中,已经有linuxptp的软件支持,位置在:meta-openembedded/meta-oe/recipes-connectivity/linuxptp/linuxptp_1.8.bb。
DESCRIPTION = "Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
SRC_URI = "http://sourceforge.net/projects/linuxptp/files/v${PV}/linuxptp-${PV}.tgz
file://build-Allow-CC-and-prefix-to-be-overriden.patch
file://no-incdefs-using-host-headers.patch
file://0003-include-missing-time.h-for-time_t.patch
file://0004-Adjust-include-header-sequence-to-avoid-duplicate-de.patch
"
SRC_URI[md5sum] = "5688cdfe57932273e1dbf35b3b97b9a0"
SRC_URI[sha256sum] = "fa8e00f6ec73cefa7bb313dce7f60dfe5eb9e2bde3353594e9ac18edc93e5165"
EXTRA_OEMAKE = "ARCH=${TARGET_ARCH}
EXTRA_CFLAGS='-D_GNU_SOURCE -DHAVE_CLOCK_ADJTIME -DHAVE_POSIX_SPAWN -DHAVE_ONESTEP_SYNC ${CFLAGS}'"
do_install () {
install -d ${D}/${bindir}
install -p ${S}/ptp4l ${D}/${bindir}
install -p ${S}/pmc ${D}/${bindir}
install -p ${S}/phc2sys ${D}/${bindir}
install -p ${S}/hwstamp_ctl ${D}/${bindir}
}
版本1.8,编译安装软件ptp4l,pmc,phy2sys,hwstam_ctl。还有一个工具软件ptpd2也是需要的:meta-openembedded/meta-networking/recipes-daemons/ptpd/ptpd_2.3.1.bb
SRC_URI = "http://downloads.sourceforge.net/project/ptpd/ptpd/${@get_sub(d)}/ptpd-${PV}.tar.gz
file://ptpd-use-pkgconfig.patch
file://ptpd.service
file://ptpd.conf
"
do_install() {
install -d ${D}${bindir} ${D}${mandir}/man8
install -m 0755 ${B}/src/ptpd2 ${D}${bindir}
install -m 0644 ${B}/src/ptpd2.8 ${D}${mandir}/man8
在openwrt系统中,也有对应的软件支持,有PACKAGE_linuxptp,但没有ptpd的支持。
ptp硬件时间ptp4l测试主从设备之间时间同步延时情况,主设备:
root@genvict_imx8qxp:~# ptp4l -i eth1 -m -H ptp4l[2354.723]: selected /dev/ptp1 as PTP clock ptp4l[2354.725]: driver changed our HWTSTAMP options ptp4l[2354.725]: tx_type 1 not 1 ptp4l[2354.725]: rx_filter 1 not 12 ptp4l[2354.725]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[2354.725]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[2354.726]: port 1: link up ptp4l[2361.445]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[2361.446]: selected best master clock d2093a.fffe.ac82dc ptp4l[2361.446]: assuming the grand master role
从设备:
root@genvict_imx8qxp:~# ptp4l -i eth1 -m -H -s ptp4l[715.079]: selected /dev/ptp1 as PTP clock ptp4l[715.081]: driver changed our HWTSTAMP options ptp4l[715.081]: tx_type 1 not 1 ptp4l[715.081]: rx_filter 1 not 12 ptp4l[715.081]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[715.081]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[715.082]: port 1: link up ptp4l[715.678]: port 1: new foreign master d2093a.fffe.ac82dc-1 ptp4l[719.679]: selected best master clock d2093a.fffe.ac82dc ptp4l[719.679]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE ptp4l[720.678]: master offset -18555634823326863 s0 freq +0 path delay 0 ptp4l[721.678]: master offset -18555634823330933 s1 freq -4070 path delay 4658 ptp4l[723.679]: master offset 9306 s2 freq +5236 path delay 4652 ptp4l[723.679]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[724.680]: master offset 4661 s2 freq +3383 path delay 4658 ptp4l[725.679]: master offset 1847 s2 freq +1967 path delay 4664 ptp4l[726.679]: master offset 453 s2 freq +1127 path delay 4664 ptp4l[727.679]: master offset -204 s2 freq +606 path delay 4767 ptp4l[728.679]: master offset -288 s2 freq +461 path delay 4823 ptp4l[729.679]: master offset -173 s2 freq +490 path delay 4823 ptp4l[730.679]: master offset -87 s2 freq +524 path delay 4823 ptp4l[731.680]: master offset -43 s2 freq +542 path delay 4823 ptp4l[732.680]: master offset -9 s2 freq +563 path delay 4823 ptp4l[733.680]: master offset 0 s2 freq +569 path delay 4823 ptp4l[734.680]: master offset -1 s2 freq +568 path delay 4823 ptp4l[735.680]: master offset -3 s2 freq +566 path delay 4821 ptp4l[736.680]: master offset -5 s2 freq +563 path delay 4821 ptp4l[737.680]: master offset -4 s2 freq +562 path delay 4821 ptp4l[738.681]: master offset -11 s2 freq +554 path delay 4821 ptp4l[739.681]: master offset -10 s2 freq +552 path delay 4821 ptp4l[740.682]: master offset -2 s2 freq +557 path delay 4821 ptp4l[741.681]: master offset -3 s2 freq +555 path delay 4821 ptp4l[742.681]: master offset -7 s2 freq +550 path delay 4821 ptp4l[743.681]: master offset -6 s2 freq +549 path delay 4821 ptp4l[744.681]: master offset -4 s2 freq +549 path delay 4821 ptp4l[745.681]: master offset -6 s2 freq +546 path delay 4821 ptp4l[746.681]: master offset -17 s2 freq +533 path delay 4821 ptp4l[747.682]: master offset -2 s2 freq +543 path delay 4820 ptp4l[748.683]: master offset -6 s2 freq +539 path delay 4820 ptp4l[749.682]: master offset -5 s2 freq +538 path delay 4820 ptp4l[750.683]: master offset -7 s2 freq +534 path delay 4820 ptp4l[751.683]: master offset -6 s2 freq +533 path delay 4820 ptp4l[752.683]: master offset -4 s2 freq +534 path delay 4820 ptp4l[753.682]: master offset -2 s2 freq +534 path delay 4820 ptp4l[754.682]: master offset 4 s2 freq +540 path delay 4819 ptp4l[755.682]: master offset -3 s2 freq +534 path delay 4818 ptp4l[756.683]: master offset -1 s2 freq +535 path delay 4818 ptp4l[757.683]: master offset -8 s2 freq +528 path delay 4818 ptp4l[758.684]: master offset -8 s2 freq +525 path delay 4818 ptp4l[759.683]: master offset -18 s2 freq +513 path delay 4818 ptp4l[760.684]: master offset -10 s2 freq +516 path delay 4817 ptp4l[761.683]: master offset -10 s2 freq +513 path delay 4817 ptp4l[762.684]: master offset -11 s2 freq +509 path delay 4817 ptp4l[763.683]: master offset -4 s2 freq +512 path delay 4817 ptp4l[764.684]: master offset -9 s2 freq +506 path delay 4817 ptp4l[765.684]: master offset -7 s2 freq +505 path delay 4817 ptp4l[766.685]: master offset -14 s2 freq +496 path delay 4818 ptp4l[767.685]: master offset -15 s2 freq +491 path delay 4818 ptp4l[768.684]: master offset -1 s2 freq +501 path delay 4817 ptp4l[769.685]: master offset -10 s2 freq +491 path delay 4817 ptp4l[770.684]: master offset -22 s2 freq +476 path delay 4821
master offset : 即PTP协议中定义的主从端时间差,单位:ns
s0,s1,s2 : 表示时钟伺服器的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,锁定状态表示不会再发生阶跃行同步,只是缓慢调整
port 0:INITIALIZING to LISTENING on INIT_COMPLET : 本地PTP管理的Unix域socket;
port 1:new foreign … : eno1上的端口;
从钟端口状态由UNCALIBRATED 变为SLAVE时,则从钟已经成功地与best master同步。
freq 值表示时钟的频率调整(以十亿分率 (ppb) 为单位)。
path delay 值表示从主时钟发送的同步消息的预计延迟(以纳秒为单位),该延迟可通过E2E或P2P方式测量,默认为E2E。
ptp4l参数:
root@genvict_imx8qxp:~# ptp4l -h
usage: ptp4l [options]
Delay Mechanism
-A Auto, starting with E2E
-E E2E, delay request-response (default)
-P P2P, peer delay mechanism
Network Transport
-2 IEEE 802.3
-4 UDP IPV4 (default)
-6 UDP IPV6
Time Stamping
-H HARDWARE (default)
-S SOFTWARE
-L LEGACY HW
Other Options
-f [file] read configuration from 'file'
-i [dev] interface device to use, for example 'eth0'
(may be specified multiple times)
-p [dev] PTP hardware clock device to use, default auto
(ignored for SOFTWARE/LEGACY HW time stamping)
-s slave only mode (overrides configuration file)
-l [num] set the logging level to 'num'
-m print messages to stdout
-q do not print messages to the syslog
-v prints the software version and exits
-h prints this message and exits
ptp软件时间
root@genvict_imx8qxp:~# ptp4l -i eth1 -m -S ptp4l[1873.750]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[1873.750]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[1873.751]: port 1: link up ptp4l[1880.173]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[1880.173]: selected best master clock d2093a.fffe.ac82dc ptp4l[1880.173]: assuming the grand master role
root@genvict_imx8qxp:~# ptp4l -i eth1 -m -S -s ptp4l[269.100]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[269.101]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[269.101]: port 1: link up ptp4l[270.392]: port 1: new foreign master d2093a.fffe.ac82dc-1 ptp4l[274.392]: selected best master clock d2093a.fffe.ac82dc ptp4l[274.392]: foreign master not using PTP timescale ptp4l[274.392]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE ptp4l[276.392]: master offset -18555634824428454 s0 freq -48507 path delay 1043720 ptp4l[277.392]: master offset -18555634824425467 s0 freq -48507 path delay 1043720 ptp4l[278.392]: master offset -18555634824433853 s0 freq -48507 path delay 1044966 ptp4l[279.392]: master offset -18555634824427912 s0 freq -48507 path delay 1042512 ptp4l[280.392]: master offset -18555634824426427 s0 freq -48507 path delay 1042512 ptp4l[281.393]: master offset -18555634824437274 s0 freq -48507 path delay 1043720 ptp4l[282.392]: master offset -18555634824456782 s0 freq -48507 path delay 1042964 ptp4l[283.393]: master offset -18555634824433920 s0 freq -48507 path delay 1042964 ptp4l[284.393]: master offset -18555634824428578 s0 freq -48507 path delay 1044234 ptp4l[285.393]: master offset -18555634824441944 s0 freq -48507 path delay 1044836 ptp4l[286.393]: master offset -18555634824429957 s0 freq -48507 path delay 1044836 ptp4l[287.393]: master offset -18555634824445587 s0 freq -48507 path delay 1045201 ptp4l[288.393]: master offset -18555634824490863 s0 freq -48507 path delay 1044836 ptp4l[289.393]: master offset -18555634824449125 s0 freq -48507 path delay 1044836 ptp4l[290.393]: master offset -18555634824520517 s0 freq -48507 path delay 1044836 ptp4l[291.393]: master offset -18555634824447828 s0 freq -48507 path delay 1044512 ptp4l[292.393]: master offset -18555634824521714 s1 freq -54336 path delay 1043755 ptp4l[293.393]: master offset 76746 s2 freq -46584 path delay 1043755【从钟锁定】 ptp4l[293.393]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[294.393]: master offset -47315 s2 freq -59038 path delay 1043755 ptp4l[295.393]: master offset 73736 s2 freq -46859 path delay 1042706 ptp4l[296.393]: master offset -34537 s2 freq -57721 path delay 1042706 ptp4l[297.393]: master offset 100759 s2 freq -44090 path delay 1022849 ptp4l[298.393]: master offset -37021 s2 freq -57905 path delay 1022849 ptp4l[299.394]: master offset 129139 s2 freq -41160 path delay 998556 ptp4l[300.393]: master offset -89000 s2 freq -63063 path delay 998556 ptp4l[301.394]: master offset 140468 s2 freq -39976 path delay 986860 ptp4l[302.393]: master offset -67289 s2 freq -60819 path delay 986860 ptp4l[303.394]: master offset 143867 s2 freq -39559 path delay 986860 ptp4l[304.393]: master offset -102454 s2 freq -64294 path delay 986860 ptp4l[305.394]: master offset 150804 s2 freq -38817 path delay 986860 ptp4l[306.393]: master offset -152484 s2 freq -69299 path delay 1014961 ptp4l[307.394]: master offset 132826 s2 freq -40635 path delay 1008634 ptp4l[308.394]: master offset -209952 s2 freq -75123 path delay 1040435 ptp4l[309.394]: master offset 118079 s2 freq -42201 path delay 1040435 ptp4l[310.394]: master offset -245562 s2 freq -78811 path delay 1040435 ptp4l[311.394]: master offset 143515 s2 freq -39760 path delay 1040435 ptp4l[312.394]: master offset -251179 s2 freq -79480 path delay 1039977 ptp4l[313.394]: master offset 166827 s2 freq -37513 path delay 1039977 ptp4l[314.394]: master offset -274175 s2 freq -81887 path delay 1042315 ptp4l[315.394]: master offset 179672 s2 freq -36323 path delay 1042315 ptp4l[316.394]: master offset -416970 s2 freq -96404 path delay 1041906 ptp4l[317.395]: master offset 211490 s2 freq -33347 path delay 1041906 ptp4l[318.394]: master offset -327499 s2 freq -87573 path delay 1041906 ptp4l[319.395]: master offset 227869 s2 freq -31808 path delay 1041676 ptp4l[320.394]: master offset -361682 s2 freq -91125 path delay 1041906
AR8031工业以太网测试:软件时间
root@genvict_imx8qxp:~# ptp4l -i eth0 -m -S ptp4l[3834.384]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[3834.385]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[3834.385]: port 1: link up ptp4l[3841.091]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[3841.091]: selected best master clock 8274b8.fffe.ed2fd8 ptp4l[3841.091]: assuming the grand master role root@genvict_imx8qxp:~# ptp4l -i eth0 -m -S -s ptp4l[2197.056]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[2197.057]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[2197.057]: port 1: link up ptp4l[2197.381]: port 1: new foreign master 8274b8.fffe.ed2fd8-1 ptp4l[2201.381]: selected best master clock 8274b8.fffe.ed2fd8 ptp4l[2201.381]: foreign master not using PTP timescale ptp4l[2201.381]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE ptp4l[2203.381]: master offset 73992419 s0 freq -91125 path delay 1030176 ptp4l[2204.381]: master offset 74040776 s0 freq -91125 path delay 1030176 ptp4l[2205.381]: master offset 74050626 s0 freq -91125 path delay 1030176 ptp4l[2206.382]: master offset 74103565 s0 freq -91125 path delay 1029720 ptp4l[2207.382]: master offset 74133374 s0 freq -91125 path delay 1029264 ptp4l[2208.382]: master offset 74171703 s0 freq -91125 path delay 1026914 ptp4l[2209.382]: master offset 74215058 s0 freq -91125 path delay 1026914 ptp4l[2210.382]: master offset 74258512 s0 freq -91125 path delay 1026317 ptp4l[2211.382]: master offset 74294741 s0 freq -91125 path delay 1026317 ptp4l[2212.382]: master offset 74329346 s0 freq -91125 path delay 1026317 ptp4l[2213.382]: master offset 74367826 s0 freq -91125 path delay 1026317 ptp4l[2214.383]: master offset 74413066 s0 freq -91125 path delay 1026809 ptp4l[2215.383]: master offset 74444050 s0 freq -91125 path delay 1029429 ptp4l[2216.383]: master offset 74480031 s0 freq -91125 path delay 1029429 ptp4l[2217.383]: master offset 74521501 s0 freq -91125 path delay 1029564 ptp4l[2218.383]: master offset 74577104 s0 freq -91125 path delay 1031566 ptp4l[2219.383]: master offset 74585956 s1 freq -54029 path delay 1031566 ptp4l[2220.383]: master offset 15231 s2 freq -52491 path delay 1031566 ptp4l[2220.383]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[2221.383]: master offset 8701 s2 freq -53135 path delay 1031566 ptp4l[2222.383]: master offset 4427 s2 freq -53558 path delay 1032830 ptp4l[2223.383]: master offset 13091 s2 freq -52679 path delay 1032830 ptp4l[2224.383]: master offset 10841 s2 freq -52893 path delay 1034742 ptp4l[2225.383]: master offset 5962 s2 freq -53375 path delay 1034742 ptp4l[2226.384]: master offset 5913 s2 freq -53374 path delay 1036519 ptp4l[2227.384]: master offset 6766 s2 freq -53282 path delay 1036519 ptp4l[2228.384]: master offset 10667 s2 freq -52881 path delay 1038131 ptp4l[2229.384]: master offset 11028 s2 freq -52834 path delay 1038131 ptp4l[2230.384]: master offset 7770 s2 freq -53152 path delay 1038703 ptp4l[2231.384]: master offset 11098 s2 freq -52808 path delay 1038131 ptp4l[2232.384]: master offset 8593 s2 freq -53050 path delay 1039049 ptp4l[2233.384]: master offset 6997 s2 freq -53203 path delay 1039049 ptp4l[2234.384]: master offset 8977 s2 freq -52996 path delay 1039126 ptp4l[2235.384]: master offset 5574 s2 freq -53330 path delay 1039880 ptp4l[2236.384]: master offset 3150 s2 freq -53570 path delay 1040487 ptp4l[2237.384]: master offset 3903 s2 freq -53490 path delay 1040158 ptp4l[2238.384]: master offset 11530 s2 freq -52716 path delay 1039126 ptp4l[2239.384]: master offset 6977 s2 freq -53165 path delay 1039126 ptp4l[2240.385]: master offset 8222 s2 freq -53032 path delay 1038525 ptp4l[2241.385]: master offset 6972 s2 freq -53150 path delay 1038410 ptp4l[2242.385]: master offset 11351 s2 freq -52701 path delay 1038410 ptp4l[2243.385]: master offset -12512 s2 freq -55099 path delay 1038080 ptp4l[2244.385]: master offset 15191 s2 freq -52314 path delay 1038080 ptp4l[2245.385]: master offset 45243 s2 freq -49263 path delay 1038080 ptp4l[2246.385]: master offset 8377 s2 freq -52942 path delay 1038080 ptp4l[2247.385]: master offset -19088 s2 freq -55707 path delay 1038080 ptp4l[2248.385]: master offset 12470 s2 freq -52539 path delay 1037455 ptp4l[2249.385]: master offset -48009 s2 freq -58635 path delay 1037455 ptp4l[2250.385]: master offset 19725 s2 freq -51842 path delay 1037455 ptp4l[2251.385]: master offset -52082 s2 freq -59075 path delay 1037846 ptp4l[2252.385]: master offset 24582 s2 freq -51384 path delay 1035974 ptp4l[2253.385]: master offset -95807 s2 freq -63518 path delay 1032487 ptp4l[2254.386]: master offset 38808 s2 freq -50018 path delay 1032487 ptp4l[2255.385]: master offset -87672 s2 freq -62754 path delay 1032487 ptp4l[2256.386]: master offset 37299 s2 freq -50219 path delay 1032487 ptp4l[2257.385]: master offset -118493 s2 freq -65917 path delay 1032487
硬件时间:
root@genvict_imx8qxp:~# ptp4l -i eth0 -m -H ptp4l[3963.827]: selected /dev/ptp0 as PTP clock ptp4l[3963.829]: driver changed our HWTSTAMP options ptp4l[3963.829]: tx_type 1 not 1 ptp4l[3963.829]: rx_filter 1 not 12 ptp4l[3963.829]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[3963.829]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[3963.830]: port 1: link up ptp4l[3971.694]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[3971.695]: selected best master clock 8274b8.fffe.ed2fd8 ptp4l[3971.695]: assuming the grand master role root@genvict_imx8qxp:~# ptp4l -i eth0 -m -H -s ptp4l[2323.827]: selected /dev/ptp0 as PTP clock ptp4l[2323.829]: driver changed our HWTSTAMP options ptp4l[2323.829]: tx_type 1 not 1 ptp4l[2323.829]: rx_filter 1 not 12 ptp4l[2323.829]: port 1: INITIALIZING to LISTENING on INITIALIZE ptp4l[2323.829]: port 0: INITIALIZING to LISTENING on INITIALIZE ptp4l[2323.830]: port 1: link up ptp4l[2323.987]: port 1: new foreign master 8274b8.fffe.ed2fd8-1 ptp4l[2327.987]: selected best master clock 8274b8.fffe.ed2fd8 ptp4l[2327.987]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE ptp4l[2329.987]: master offset 68420017 s0 freq +0 path delay 962 ptp4l[2330.986]: master offset 68418929 s1 freq -1088 path delay 962 ptp4l[2331.987]: master offset -11 s2 freq -1099 path delay 962 ptp4l[2331.987]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED ptp4l[2332.987]: master offset -5 s2 freq -1096 path delay 962 ptp4l[2333.987]: master offset 245 s2 freq -848 path delay 708 ptp4l[2334.987]: master offset -3 s2 freq -1022 path delay 708 ptp4l[2335.988]: master offset 153 s2 freq -867 path delay 473 ptp4l[2336.987]: master offset -74 s2 freq -1048 path delay 476 ptp4l[2337.987]: master offset -127 s2 freq -1123 path delay 476 ptp4l[2338.987]: master offset -97 s2 freq -1132 path delay 473 ptp4l[2339.987]: master offset -62 s2 freq -1126 path delay 473 ptp4l[2340.988]: master offset -14 s2 freq -1096 path delay 454 ptp4l[2341.987]: master offset -22 s2 freq -1108 path delay 454 ptp4l[2342.987]: master offset -2 s2 freq -1095 path delay 450 ptp4l[2343.988]: master offset 1 s2 freq -1093 path delay 450 ptp4l[2344.988]: master offset 1 s2 freq -1092 path delay 450 ptp4l[2345.988]: master offset -7 s2 freq -1100 path delay 450 ptp4l[2346.988]: master offset -6 s2 freq -1101 path delay 450 ptp4l[2347.988]: master offset -1 s2 freq -1098 path delay 450 ptp4l[2348.989]: master offset 0 s2 freq -1097 path delay 450 ptp4l[2349.988]: master offset -7 s2 freq -1104 path delay 450 ptp4l[2350.988]: master offset 1 s2 freq -1098 path delay 450 ptp4l[2351.988]: master offset -6 s2 freq -1105 path delay 451 ptp4l[2352.988]: master offset -1 s2 freq -1102 path delay 451 ptp4l[2353.989]: master offset -9 s2 freq -1110 path delay 452 ptp4l[2354.989]: master offset 1 s2 freq -1103 path delay 452 ptp4l[2355.989]: master offset -9 s2 freq -1113 path delay 452 ptp4l[2356.990]: master offset -4 s2 freq -1110 path delay 451 ptp4l[2357.989]: master offset -6 s2 freq -1113 path delay 451 ptp4l[2358.989]: master offset 4 s2 freq -1105 path delay 450 ptp4l[2359.989]: master offset -7 s2 freq -1115 path delay 450 ptp4l[2360.989]: master offset 0 s2 freq -1110 path delay 450 ptp4l[2361.990]: master offset 2 s2 freq -1108 path delay 450 ptp4l[2362.989]: master offset -10 s2 freq -1120 path delay 450 ptp4l[2363.990]: master offset 1 s2 freq -1112 path delay 450 ptp4l[2364.989]: master offset -8 s2 freq -1120 path delay 450 ptp4l[2365.990]: master offset 4 s2 freq -1111 path delay 450 ptp4l[2366.990]: master offset -12 s2 freq -1125 path delay 452 ptp4l[2367.991]: master offset 1 s2 freq -1116 path delay 452 ptp4l[2368.990]: master offset -4 s2 freq -1121 path delay 453 ptp4l[2369.991]: master offset 0 s2 freq -1118 path delay 453 ptp4l[2370.990]: master offset 1 s2 freq -1117 path delay 453 ptp4l[2371.991]: master offset 5 s2 freq -1113 path delay 453 ptp4l[2372.990]: master offset -11 s2 freq -1127 path delay 453 ptp4l[2373.990]: master offset -4 s2 freq -1123 path delay 453 ptp4l[2374.991]: master offset -17 s2 freq -1138 path delay 453 ptp4l[2375.990]: master offset -3 s2 freq -1129 path delay 452ptp时间同步
晚上说可用phc2sys设置时间同步,但没有成功。使用ptpd2同步时间。
ptpd2在多台设备间会选举出一个master设备,其他设备同步master设备上的时间戳,猜测是根据多台设备时间,看那个设备时间最新就设置为master。ptpd2参数:
-C --foreground global:foreground=
-m --masterslave ptpengine:preset=masterslave Master, slave when not best
-i --interface [dev] ptpengine:interface=
主机:
root@genvict_imx8qxp:~# ptpd2 -C -m -i eth1 2022-05-12 09:30:13.832429 ptpd2[9587].startup (info) (___) Configuration OK 2022-05-12 09:30:13.833745 ptpd2[9587].startup (info) (___) Successfully acquired lock on /var/run/ptpd2.lock 2022-05-12 09:30:13.834079 ptpd2[9587].startup (notice) (___) PTPDv2 started successfully on eth1 using "masterslave" preset (PID 9587) 2022-05-12 09:30:13.834204 ptpd2[9587].startup (info) (___) TimingService.PTP0: PTP service init 2022-05-12 09:30:13.836174 ptpd2[9587].eth1 (info) (init) Observed_drift loaded from kernel: -46279 ppb 2022-05-12 09:30:13.936592 ptpd2[9587].eth1 (notice) (lstn_init) Now in state: PTP_LISTENING 2022-05-12 09:30:23.834353 ptpd2[9587].eth1 (notice) (lstn_init) TimingService.PTP0: elected best TimingService 2022-05-12 09:30:23.834526 ptpd2[9587].eth1 (info) (lstn_init) TimingService.PTP0: acquired clock control 2022-05-12 09:30:25.937648 ptpd2[9587].eth1 (notice) (mst) Now in state: PTP_MASTER, Best master: 723f47fffedc7e39(unknown)/1 (self) 2022-05-12 09:33:00.512400 ptpd2[9587].eth1 (info) (mst) TimingService: Timing domain shutting down 2022-05-12 09:33:00.512567 ptpd2[9587].eth1 (info) (mst) TimingService.PTP0: PTP service shutdown 2022-05-12 09:33:00.513110 ptpd2[9587].eth1 (notice) (___) Shutdown on close signal
从机:
root@genvict_imx8qxp:~# ptpd2 -C -m -i eth1 2021-10-08 16:30:40.211752 ptpd2[24089].startup (info) (___) Configuration OK 2021-10-08 16:30:40.213153 ptpd2[24089].startup (info) (___) Successfully acquired lock on /var/run/ptpd2.lock 2021-10-08 16:30:40.213556 ptpd2[24089].startup (notice) (___) PTPDv2 started successfully on eth1 using "masterslave" preset (PID 24089) 2021-10-08 16:30:40.213638 ptpd2[24089].startup (info) (___) TimingService.PTP0: PTP service init 2021-10-08 16:30:40.215653 ptpd2[24089].eth1 (info) (init) Observed_drift loaded from kernel: -50697 ppb 2021-10-08 16:30:40.316119 ptpd2[24089].eth1 (notice) (lstn_init) Now in state: PTP_LISTENING 2021-10-08 16:30:49.607161 ptpd2[24089].eth1 (info) (lstn_init) New best master selected: 723f47fffedc7e39(unknown)/1 2021-10-08 16:30:49.607351 ptpd2[24089].eth1 (notice) (slv) Now in state: PTP_SLAVE, Best master: 723f47fffedc7e39(unknown)/1 2021-10-08 16:30:49.607463 ptpd2[24089].eth1 (notice) (slv) Received first Sync from Master 2021-10-08 16:30:49.607549 ptpd2[24089].eth1 (critical) (slv) Offset above 1 second. Clock will step. 2022-05-12 09:30:27.938434 ptpd2[24089].eth1 (warning) (slv) Stepped the system clock to: 05/12/22 09:30:27.938365376 2022-05-12 09:30:28.041299 ptpd2[24089].eth1 (notice) (lstn_reset) Now in state: PTP_LISTENING 2022-05-12 09:30:28.544542 ptpd2[24089].eth1 (notice) (lstn_reset) TimingService.PTP0: elected best TimingService 2022-05-12 09:30:28.544718 ptpd2[24089].eth1 (info) (lstn_reset) TimingService.PTP0: acquired clock control 2022-05-12 09:30:29.937067 ptpd2[24089].eth1 (info) (lstn_reset) New best master selected: 723f47fffedc7e39(unknown)/1 2022-05-12 09:30:29.937295 ptpd2[24089].eth1 (notice) (slv) Now in state: PTP_SLAVE, Best master: 723f47fffedc7e39(unknown)/1 2022-05-12 09:30:30.936944 ptpd2[24089].eth1 (notice) (slv) Received first Sync from Master 2022-05-12 09:30:31.939547 ptpd2[24089].eth1 (notice) (slv) Received first Delay Response from Master 2022-05-12 09:33:01.696386 ptpd2[24089].eth1 (info) (slv) TimingService: Timing domain shutting down 2022-05-12 09:33:01.696558 ptpd2[24089].eth1 (info) (slv) TimingService.PTP0: PTP service shutdown 2022-05-12 09:33:01.697074 ptpd2[24089].eth1 (notice) (___) Shutdown on close signal root@genvict_imx8qxp:~# date Thu May 12 09:33:32 CST 2022
测试主从设备时间延迟数据不严谨方法:根据系统时间跳变后GPIO模拟输出一个pps波形,高电平占空比10%。
#!/bin/bash echo 403 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio403/direction echo 0 > /sys/class/gpio/gpio403/value old=$(date +%T) while true do new=$(date +%T) if [ "$old" != "$new" ];then old=$new echo 1 > /sys/class/gpio/gpio403/value usleep 100000; echo 0 > /sys/class/gpio/gpio403/value fi usleep 10; done
测试



