环境
系统为:Ubuntu22.04.1
使用软件包:GitHub项目ptpd ptpd/ptpd: PTPd official source - master branch a.k.a. trunk (github.com)
安装前准备
安装libtool:
sudo apt-get install libtool
(可选)若需要用ethernet作为运输载体,则要安装libpcap-dev:
sudo apt-get install libpcap-dev
开始安装ptpd
cd进入ptpd-master目录后,开始执行以下命令实现安装:
autoreconf -vi
./configure
make
无报错就是安装成功。
两台linux机实现P2P对时
cd进入src目录,在两台通信机上执行以下命令:
sudo ./ptpd2 -m -C -i {network interface}
Master机输出:
2022-11-17 00:04:03.602760 ptpd2[8844].startup (notice) (___) PTPd version 2.3.2 starting
2022-11-17 00:04:03.602808 ptpd2[8844].startup (info) (___) Starting ptpd2 daemon with parameters: ptpd2 -i ens33 -m -u 192.168.8.213 -C
2022-11-17 00:04:03.602834 ptpd2[8844].startup (info) (___) Checking configuration
2022-11-17 00:04:03.602887 ptpd2[8844].startup (warning) (___) Warning: It is recommended to manually set the delay request interval (ptpengine:log_delayreq_interval) to required value in unicast mode
2022-11-17 00:04:03.602987 ptpd2[8844].startup (info) (___) Configuration OK
2022-11-17 00:04:03.603226 ptpd2[8844].startup (info) (___) Successfully acquired lock on /var/run/ptpd2.lock
2022-11-17 00:04:03.603284 ptpd2[8844].startup (notice) (___) PTPd started successfully on ens33 using "masterslave" preset (PID 8844)
2022-11-17 00:04:03.603309 ptpd2[8844].startup (info) (___) TimingService.PTP0: PTP service init
2022-11-17 00:04:03.603636 ptpd2[8844].ens33 (info) (init) Observed_drift loaded from kernel: -6791 ppb
2022-11-17 00:04:03.603674 ptpd2[8844].ens33 (notice) (lstn_init) Now in state: PTP_LISTENING
2022-11-17 00:04:13.603701 ptpd2[8844].ens33 (notice) (lstn_init) TimingService.PTP0: elected best TimingService
2022-11-17 00:04:13.603778 ptpd2[8844].ens33 (info) (lstn_init) TimingService.PTP0: acquired clock control
2022-11-17 00:04:15.604687 ptpd2[8844].ens33 (notice) (mst) Now in state: PTP_MASTER, Best master: 000c29fffe6f3b57(unknown)/1 (self)
Slave机输出:
2022-11-17 00:04:06.034716 ptpd2[3095].startup (notice) (___) PTPd version 2.3.2 starting
2022-11-17 00:04:06.034756 ptpd2[3095].startup (info) (___) Starting ptpd2 daemon with parameters: ./ptpd2 -i ens33 -C -m -u 192.168.8.211
2022-11-17 00:04:06.034819 ptpd2[3095].startup (info) (___) Checking configuration
2022-11-17 00:04:06.034878 ptpd2[3095].startup (warning) (___) Warning: It is recommended to manually set the delay request interval (ptpengine:log_delayreq_interval) to required value in unicast mode
2022-11-17 00:04:06.034983 ptpd2[3095].startup (info) (___) Configuration OK
2022-11-17 00:04:06.035232 ptpd2[3095].startup (info) (___) Successfully acquired lock on /var/run/ptpd2.lock
2022-11-17 00:04:06.035289 ptpd2[3095].startup (notice) (___) PTPd started successfully on ens33 using "masterslave" preset (PID 3095)
2022-11-17 00:04:06.035302 ptpd2[3095].startup (info) (___) TimingService.PTP0: PTP service init
2022-11-17 00:04:06.035801 ptpd2[3095].ens33 (info) (init) Observed_drift loaded from kernel: -33997 ppb
2022-11-17 00:04:06.035837 ptpd2[3095].ens33 (notice) (lstn_init) Now in state: PTP_LISTENING
2022-11-17 00:04:16.035635 ptpd2[3095].ens33 (notice) (lstn_init) TimingService.PTP0: elected best TimingService
2022-11-17 00:04:16.035822 ptpd2[3095].ens33 (info) (lstn_init) TimingService.PTP0: acquired clock control
2022-11-17 00:04:17.606975 ptpd2[3095].ens33 (info) (lstn_init) New best master selected: 000c29fffe6f3b57(unknown)/1
2022-11-17 00:04:17.607067 ptpd2[3095].ens33 (notice) (slv) Now in state: PTP_SLAVE, Best master: 000c29fffe6f3b57(unknown)/1 (IPv4:192.168.8.211)
2022-11-17 00:04:18.607522 ptpd2[3095].ens33 (notice) (slv) Received first Sync from Master
2022-11-17 00:04:19.612907 ptpd2[3095].ens33 (notice) (slv) Received first Delay Response from Master
坑
1. Ubuntu22.04.1系统自带ntp网络时间自动校正,需要关闭时间自动校正:
timedatectl set-ntp false
2.在笔者测试环境中,路由器会过滤掉PTP多播报文,若ptpd无法正常运行,需要将ptpd设置为单播
在Master和Slave机命令行后各加上参数:
-u {ip addr}
3. Master机不会输出statistics log,只有Slave机会输出statistics log
在Slave机命令行后加上参数:
-S {path}
ptpd指令官方文档:
ptpd(8) — ptpd — Debian unstable — Debian Manpages