X5 PTP Master 配置指南(Mid-360 示例)
Scope: 本文档的主体是 X5 作为 LinuxPTP IEEE1588v2 UDP/IP master 的配置、启动和验证。Mid-360 仅作为示例 slave 用来验证 master 侧配置。
示例板端:X5 板端,默认 PTP 网段地址为
192.168.1.12/24。下面的命令都以 Mid-360 为示例;如果你换成其他 PTP slave,通常只需要替换从设备 IP、网段地址和抓包目标。
1. 结论
Mid-360 官方支持 PTP、gPTP、GPS 三种同步方式;这里采用官方 PTP 流程。X5 作为唯一 master,Mid-360 作为 slave,链路需要支持硬件时间戳。
X5 板端实测满足这个方案的基本条件:
项目 |
观测值 |
|---|---|
系统 |
Buildroot 2022.08,kernel |
网口 |
|
PTP 硬件时钟 |
|
硬件时间戳 |
|
工具 |
|
2. 安全边界
不要把 Mid-360 的 RJ45 接 PoE。
同一个 Mid-360 网络里只允许一个 PTP master。
不要把 PTP 和 gPTP 混在同一网络里使用。
脚本会重启 X5 上的
ptp4l和phc2sys,并写入/etc/linuxptp-mid360-master.cfg、/etc/default/ptp4l、/etc/default/phc2sys。脚本只会确认/补齐
eth0上的 PTP 网段地址,默认192.168.1.12/24;不会重写/etc/network/interfaces。
3. 推荐网络(Mid-360 示例)
X5 eth0 <---- 非 PoE 网线/普通交换机 ----> Mid-360 RJ45
默认地址约定:
设备 |
地址 |
|---|---|
X5 PTP 网段地址 |
|
Mid-360 地址 |
|
如果你的 Mid-360 已改成别的 IP,用 --lidar-ip 指定;如果 LiDAR 网段不是 192.168.1.0/24,用 --host-lidar-cidr 指定 X5 的网段地址。
4. 一键配置和验证
脚本位于 RoboBaton_4p_demo/scripts/env_setup/configure_x5_ptp_master.sh。如果你已经有这个公开仓库,直接复制脚本到板端即可:
git clone https://github.com/Hessian-matrix/RoboBaton_4p_demo.git
cd RoboBaton_4p_demo
scp scripts/env_setup/configure_x5_ptp_master.sh root@<x5-ip>:/root/configure_x5_ptp_master.sh
然后登录 X5,在板端执行:
ssh root@<x5-ip>
chmod 755 /root/configure_x5_ptp_master.sh
sh /root/configure_x5_ptp_master.sh \
--interface eth0 \
--host-lidar-cidr 192.168.1.12/24 \
--lidar-ip 192.168.1.100 \
--verify-timeout 30
如果没有 SSH key,可以先把脚本放进 /root/,再执行。
脚本成功时最后输出:
RESULT=PASS
RESULT=PASS 代表:
eth0支持 PTP 硬件 TX/RX/raw timestamp。X5 已确认或追加 PTP 网段地址
192.168.1.12/24。ptp4l已按 master 配置启动。phc2sys已启动,使eth0PHC 跟随CLOCK_REALTIME。pmc看到了portState MASTER。tcpdump捕获到了 PTP 报文。Mid-360 侧报文中的
timestamp_type表示 PTP 同步。
如果没有 Mid-360 接入,或 Mid-360 IP 不匹配,脚本会配置服务但最终可能返回 RESULT=FAIL,常见失败点是 PTP_LIDAR_PACKET=FAIL。
5. 脚本写入的配置
5.1 /etc/linuxptp-mid360-master.cfg
[global]
twoStepFlag 1
masterOnly 1
network_transport UDPv4
delay_mechanism E2E
time_stamping hardware
step_threshold 1.0
[eth0]
关键点:
masterOnly 1:X5 只作为 master。network_transport UDPv4:对应 Mid-360 官方 PTP UDP/IP。delay_mechanism E2E:对应官方 Delay request-response 机制。time_stamping hardware:使用 X5eth0的硬件时间戳。
5.2 /etc/default/ptp4l
PTP4L_ARGS="-f /etc/linuxptp-mid360-master.cfg -i eth0"
5.3 /etc/default/phc2sys
PHC2SYS_ARGS="-c eth0 -s CLOCK_REALTIME -O 0 -S 1.0"
含义:
-s CLOCK_REALTIME:X5 系统时间作为源。-c eth0:同步到eth0的 PTP hardware clock。-O 0:不加固定偏移。-S 1.0:初始差值超过 1 秒时直接 step。
5.4 ifupdown 地址钩子
脚本会写入:
/etc/network/if-up.d/mid360-ptp-alias
/etc/network/if-down.d/mid360-ptp-alias
用途:网卡 up/down 时自动添加/删除 192.168.1.12/24 的 PTP 网段地址。脚本不重写 /etc/network/interfaces,避免误伤其他地址、网关和 metric。
6. 手工验证命令
脚本已经自动执行了这些检查;需要人工复核时可在板端运行:
ethtool -T eth0
ip -br addr show eth0
ps w | sed -n '/[p]tp4l\|[p]hc2sys/p'
pmc -u -b 0 'GET PORT_DATA_SET'
tcpdump -i eth0 -nn 'udp port 319 or udp port 320'
tcpdump -i eth0 -nn 'host 192.168.1.100 and (udp port 319 or udp port 320)'
期望:
ethtool -T eth0里有硬件 TX/RX/raw timestamp。pmc输出包含portState MASTER。抓包可见 UDP 319/320 PTP 报文。
接入 Mid-360 后,抓包可见与 Mid-360 IP 相关的 PTP 报文。
Mid-360 侧最终确认方式:
查看点云包头
timestamp_type;官方说明timestamp_type == 1表示 PTP 同步,时间字段为uint64_t,单位 ns。或使用 Livox Viewer 的 Settings 查看 Sync Type。
7. 失败排查
现象 |
优先检查 |
|---|---|
|
确认参数 |
|
检查 |
|
检查 |
|
检查 Mid-360 是否上电、IP 是否等于 |
Livox 数据仍非 PTP |
检查点云包头 |
8. 回滚
脚本每次覆盖已存在文件前都会保留带 run id 的备份,例如:
/etc/linuxptp-mid360-master.cfg.bak.<run-id>
/etc/default/ptp4l.bak.<run-id>
/etc/default/phc2sys.bak.<run-id>
手工回滚示例:
cp -p /etc/default/ptp4l.bak.<run-id> /etc/default/ptp4l
cp -p /etc/default/phc2sys.bak.<run-id> /etc/default/phc2sys
[ -f /etc/linuxptp-mid360-master.cfg.bak.<run-id> ] && \
cp -p /etc/linuxptp-mid360-master.cfg.bak.<run-id> /etc/linuxptp-mid360-master.cfg
rm -f /etc/network/if-up.d/mid360-ptp-alias /etc/network/if-down.d/mid360-ptp-alias
ip addr del 192.168.1.12/24 dev eth0 2>/dev/null || true
/etc/init.d/S65ptp4l restart
/etc/init.d/S66phc2sys restart
9. 参考源
Livox Mid-360 同步方式和 PoE 警告:https://livox-wiki-en.readthedocs.io/en/latest/tutorials/new_product/mid360/mid360.html
LinuxPTP 硬件/软件 timestamp 能力和
ethtool -T检查:https://raw.githubusercontent.com/richardcochran/linuxptp/master/README.org