摘要:
硬件时间戳是实现纳秒级PTP同步精度的核心,其关键在于网卡PHY在报文最接近物理传输的时刻标记时间。LinuxPTP支持五种时间戳模式:软件时间戳(微秒级,内核协议栈处理)、硬件时间戳(纳秒级,PHY直接标记)、旧版硬件时间戳(亚微秒级)、以及单步时钟的两种变体(Sync和P2P)。配置过程通过`SIOCSHWTSTAMP` ioctl设置网卡驱动(指定发送类型如`HWTSTAMP_TX_ON`和接收过滤如`HWTSTAMP_FILTER_PTP_V2_L4_EVENT`),再通过`SO_TIMESTAMPING` socket选项启用内核时间戳报告。发送时间戳通过`MSG_ERRQUEUE`和`recvmsg`异步获取,需`poll`等待。单步时钟允许网卡在发送时直接修改报文内的`originTimestamp`字段,省去`Follow_Up`消息,但需要硬件支持UDP校验和自动修正。虚拟时钟支持多域PTP场景,通过`SOF_TIMESTAMPING_BIND_PHC`绑定不同PHC索引。 阅读全文
posted @ 2026-04-21 13:46
lularible
阅读(22)
评论(0)
推荐(0)
摘要:
LinuxPTP的传输层为PTP报文构建了统一的“高速公路”抽象,通过`struct transport`接口统一管理UDP/IPv4、UDP/IPv6、原始以太网等多种传输方式。UDP传输使用端口319(事件消息)和320(普通消息),通过组播地址(224.0.1.129主组播和224.0.0.107 peer组播)实现报文分发,并支持DSCP优先级配置。原始以太网传输绕过IP协议栈,直接使用EtherType 0x88F7和专用组播MAC地址(01:1B:19:00:00:00、01:80:C2:00:00:0E),通过BPF过滤器高效过滤报文,并动态适配VLAN封装和PRP冗余协议。时间戳配置通过`SO_TIMESTAMPING`和`SIOCSHWTSTAMP`实现软件/硬件时间戳选择,支持单步时钟模式。Unix域套接字作为管理接口,用于本地进程间通信。整个设计体现了分层抽象与多态调用的架构智慧。 阅读全文
posted @ 2026-04-21 13:45
lularible
阅读(19)
评论(0)
推荐(0)
摘要:
LinuxPTP通过PHC(PTP硬件时钟)子系统实现用户态与内核硬件时钟的对话。核心机制是将PHC设备文件(如`/dev/ptp0`)的文件描述符转换为`clockid_t`,从而使用标准的`clock_adjtime`系统调用操作硬件时钟。关键操作包括:频率调整(`clockadj_set_freq`,单位ppb,内核使用`freq = ppb × 65.536`的缩放格式)、相位设置(`clockadj_set_phase`,渐进调整小偏差)和时钟跳变(`clockadj_step`,立即修正大偏差)。系统时钟需要特殊处理,通过调整tick长度实现更宽的频率范围。PHC支持查询最大调整范围、PPS信号和相位调整能力。`phc2sys`工具负责将PHC时间同步到系统时钟。这种设计让用户态程序能够精确控制硬件时钟,实现纳秒级的时间同步。 阅读全文
posted @ 2026-04-21 13:41
lularible
阅读(36)
评论(0)
推荐(0)

浙公网安备 33010602011771号