4.3.27. 时间同步调试指南
4.3.27.1. 概述
时间
| 方案 | 主要 |
典型 |
|---|---|---|
| NTP | 通过 |
通用 |
| PTP | 提供 |
工业 |
| RTC | 维持 |
所有 |
| KVM 时钟 |
解决 |
虚拟化 |
| TSC | 利用 CPU 内部 |
内核 |
| HPET | 提供 |
需要 |
| Adjtimex | 调整 |
时间 |
| Tickless | 动态 |
移动 |
本
PPS( Pulse Per Second,每秒
4.3.27.2. 特点
高精度:依赖
硬件
低
多
4.3.27.3. 功能描述
典型应用
通信
高频
科学实验:分布式
电力系统:电网
功能原理
硬件
信号 生成:
GPS 接收器、原子钟
内核
捕获 与 记录:
PPS 信号
Linux 内核
用户
态 时间 修正:
时间
工作方式
硬件层
信号源: GPS 模块(如 U-Blox)、 PPS 发生器、原子钟
等。 接口类型:
GPIO 引脚:直接
连接 主板 的 GPIO 接口(需 电平 匹配)。 串口:通过 RS-232 的 DCD 或 RI 信号线
传输 PPS。 专用
接口卡:如 Endace DAG 卡、 Intel i210 NIC 的 PPS 支持。
内核层
PPS 子系统:
驱动
设备
时间
戳 记录:
PPS 触发
用户态层
同步
工具: Chrony:通过 refclock PPS 指令
绑定 PPS 设备,优先 使用 其 时间 戳。 PTP: ptp4l 可
配置 PPS 为 时间 参考 源,结合 PTP 协议 实现 多 节点 同步。 NTP:通过 pps 驱动
类型 配置,与 NTP 服务器 时间 融合 校准。
4.3.27.4. 驱动代码
该
检测 pps 信号
dts 部分
(1) {project}/kernel/arch/arm64/boot/dts/hobot/pinmux-func.dtsi 中
&lsio_iomuxc {
......
gps_pps_func: gps_pps_func {
horizon,pins = <
LSIO_I2C1_SDA LSIO_PINMUX_2 BIT_OFFSET22 MUX_ALT1 &pconf_input_en_3v3
>; /*因为复用的 I2C1_SDA pin 的地址 , 所以定义该 pin 的时候,只需要更改 MUX_ALT1即可*/
};
};
(2) {project}/kernel/arch/arm64/boot/dts/hobot/x5-evb.dtsi 中
&hobot_pps {
status = "okay";
};
(3) {project}/kernel/arch/arm64/boot/dts/hobot/x5.dtsi 对 hobot_pps 进行
hobot_pps: hobot_pps {
pinctrl-names = "default";
pinctrl-0 = <&gps_pps_func &lsio_gpio1_10>;/* 指定引脚控制器状态 "default" 对应的引脚配置,引用了一个名为 "gps_pps_func" 和 "lsio_gpio1_10"的引脚配置*/
interrupt-parent = <&ls_gpio1_porta>;/*指定该设备的中断父节点为 "ls_gpio1_porta",即该设备的中*/
interrupts = <10 IRQ_TYPE_EDGE_RISING>; /*指定中断号和中断触发类型,中断号为 10,触发类型为上升沿触发(IRQ_TYPE_EDGE_RISING)*/
compatible = "hobot-pps"; /*指定设备的兼容性字符串,用于匹配驱动程序。*/
status = "disabled"; /*指定设备的状态为 "disabled",表示该设备默认情况下是禁用的,不会在系统中启用*/
};
驱动
#define REAL_PPS_ENABLE
// #define TIMER_INTERVAL 1
deconfig 部分
CONFIG_HOBOT_PPS_CLIENT=y
CONFIG_PPS_CLIENT_HOBOT_PPS=y
注意:这里
4.3.27.5. 功能使用
使用 ppstest 测试代码,来

测试工具
4.3.27.6. 常见问题
Q : 如何
确认 pps 信号 是否 真的 产生。 A : 可以
使用 示波器 来 观察,接上 pps 信号 发生器 设备 之后,发现 形 如 下面 的 信号,可以 判断 pps 信号 是否 真实 产生 了。

如果