PTP协议精讲(4.5):编译运行与测试

4.5 编译运行与测试

源码版本说明

本章基于 ptp-lite v1.0.0 (2026-04-10)

Makefile

makefile 复制代码
# ==================== 编译器配置 ====================

# x86编译器(默认)
CC = gcc

# ARM架构编译器
CC_ARM64 = aarch64-linux-gnu-gcc
CC_ARM32 = arm-linux-gnueabihf-gcc

# ==================== 编译选项 ====================

# x86编译选项
CFLAGS = -Wall -Wextra -O2 -std=gnu11
LDFLAGS = -lrt -lm

# ARM64编译选项
CFLAGS_ARM64 = -Wall -Wextra -O2 -std=gnu11
LDFLAGS_ARM64 = -lrt -lm

# ARM32编译选项
CFLAGS_ARM32 = -Wall -Wextra -O2 -std=gnu11
LDFLAGS_ARM32 = -lrt -lm

# ==================== x86编译目标(默认) ====================

all: ptp_master ptp_slave

ptp_master: ptp_master.c ptp_message.c ptp_servo.c
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

ptp_slave: ptp_slave.c ptp_message.c ptp_servo.c
	$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS)

# ==================== ARM64编译目标 ====================

arm64: ptp_master_arm64 ptp_slave_arm64

ptp_master_arm64: ptp_master.c ptp_message.c ptp_servo.c
	$(CC_ARM64) $(CFLAGS_ARM64) -o $@ $^ $(LDFLAGS_ARM64)

ptp_slave_arm64: ptp_slave.c ptp_message.c ptp_servo.c
	$(CC_ARM64) $(CFLAGS_ARM64) -o $@ $^ $(LDFLAGS_ARM64)

# ==================== ARM32编译目标 ====================

arm32: ptp_master_arm32 ptp_slave_arm32

ptp_master_arm32: ptp_master.c ptp_message.c ptp_servo.c
	$(CC_ARM32) $(CFLAGS_ARM32) -o $@ $^ $(LDFLAGS_ARM32)

ptp_slave_arm32: ptp_slave.c ptp_message.c ptp_servo.c
	$(CC_ARM32) $(CFLAGS_ARM32) -o $@ $^ $(LDFLAGS_ARM32)

# ==================== 清理目标 ====================

clean:
	rm -f ptp_master ptp_slave *.o

clean-arm64:
	rm -f ptp_master_arm64 ptp_slave_arm64 *.o

clean-arm32:
	rm -f ptp_master_arm32 ptp_slave_arm32 *.o

clean-all: clean clean-arm64 clean-arm32

# ==================== 辅助目标 ====================

# 编译所有架构版本
all-arch: all arm64 arm32

# 显示帮助信息
help:
	@echo "PTP-lite 编译选项:"
	@echo "  make           - 编译x86版本(默认)"
	@echo "  make arm64     - 编译ARM64版本"
	@echo "  make arm32     - 编译ARM32版本"
	@echo "  make all-arch  - 编译所有架构版本"
	@echo ""
	@echo "清理选项:"
	@echo "  make clean         - 清理x86版本"
	@echo "  make clean-arm64   - 清理ARM64版本"
	@echo "  make clean-arm32   - 清理ARM32版本"
	@echo "  make clean-all     - 清理所有版本"

.PHONY: all arm64 arm32 clean clean-arm64 clean-arm32 clean-all all-arch help

编译步骤

x86架构(默认)

bash 复制代码
make

ARM64架构

bash 复制代码
make arm64

生成文件:ptp_master_arm64, ptp_slave_arm64

ARM32架构

bash 复制代码
make arm32

生成文件:ptp_master_arm32, ptp_slave_arm32

编译所有架构

bash 复制代码
make all-arch

查看帮助

bash 复制代码
make help

交叉编译工具链安装

Ubuntu/Debian系统

bash 复制代码
# 安装ARM64工具链
sudo apt install gcc-aarch64-linux-gnu

# 安装ARM32工具链(硬浮点)
sudo apt install gcc-arm-linux-gnueabihf

Fedora/CentOS系统

bash 复制代码
# 安装ARM64工具链
sudo yum install gcc-aarch64-linux-gnu

# 安装ARM32工具链
sudo yum install gcc-arm-linux-gnueabihf

测试步骤

bash 复制代码
# 步骤1:编译
make

# 步骤2:在机器A运行主时钟
sudo ./ptp_master eth0

# 步骤3:在机器B运行从时钟
sudo ./ptp_slave eth0

# 步骤4:观察同步效果
# 从时钟输出:
# Received Sync seq=0
# Follow_Up seq=0: t1=... t2=...
# Delay_Resp: delay=2000 ns offset=-5000 ns
# CLOCK JUMP: -5000 ns (new time: ...)
# ...

# 步骤5:验证时间
date
# 两台机器的时间应该接近

验证编译结果

bash 复制代码
# 查看编译后的程序架构信息
file ptp_master        # ELF 64-bit x86-64
file ptp_master_arm64  # ELF 64-bit ARM aarch64
file ptp_master_arm32  # ELF 32-bit ARM

清理

bash 复制代码
# 清理x86版本
make clean

# 清理ARM64版本
make clean-arm64

# 清理ARM32版本
make clean-arm32

# 清理所有版本
make clean-all

📚 本文内容摘自本人的开源书《PTP技术书 - 从思想实验到协议实现》

全书从时间本质的思想实验出发,深度解析 IEEE 1588 协议、逐章分析 LinuxPTP 源码,并带你动手实现一个轻量级 PTP 程序(ptp-lite)。

🔗 在线阅读/下载:ptp-book

bash 复制代码
git clone https://github.com/Lularible/ptp-book.git

⭐ 如果对您有帮助,欢迎 Star 支持,也欢迎通过 GitHub Issues 交流讨论。

相关推荐
泰和英杰19 分钟前
2026 华为数字能源 + 机房工程实操标准:故障排查、机房建设、设备选型标准化技术方案
运维·服务器·网络
mounter62520 分钟前
探索未来 AI 算力网络的基石:从传统 RoCE 走向 SRv6 驱动的弹性弹性网络(解析 Netdev 0x1A 创新实践)
linux·网络·人工智能·linux kernel·kernel·rdma·rocev2
卷无止境25 分钟前
开源项目如何活下去:从"为爱发电"到可持续商业
开源
x_x-F41 分钟前
深入浅出 Linux 网络核心:sk_buff 的内存与指针流转
linux·运维·网络
冬奇Lab11 小时前
每日一个开源项目(第161篇):Open Interpreter - 开源 AI 编程 Agent,用 Rust 重写,支持 Kimi、Qwen、DeepSeek
人工智能·开源·资讯
千桐科技12 小时前
qData 数据中台开源版从 MySQL 到 Doris完成一次数据同步
大数据·mysql·开源·doris·数据中台·qdata
CHANG_THE_WORLD13 小时前
TCP 三次握手彻底解析:SYN、ACK、SEQ、确认号与状态迁移
网络·网络协议·tcp/ip
2501_9151063214 小时前
TraceEagle 代理抓包教程 本机和手机的 HTTPS 抓包方法
网络协议·计算机网络·网络安全·ios·adb·https·udp
openKylin14 小时前
与全球技术演进同频,openKylin 3.0从C迈向Rust
c语言·开发语言·rust·开源·开放原子·openkylin
小心我捶你啊14 小时前
数据采集和Web解锁不是一回事,从用途到规则区分
前端·爬虫·网络协议