ptp4l使用

ptp4l是关于1588v2 ptp协议栈的开源代码,其中实现了各种ITU 规定的profile. ITU规定的各种profile主要满足电信要求的一些profile, profile的定义请参看1588v2协议。Ptp4l实现了BC时钟和OC时钟. 本文主要分析ptp4l的开源代码。

ptp4l的使用手册 https://linux.die.net/man/8/ptp4l.

语法:

ptp4l [ -A | -E | -P ] [ -2 | -4 | -6 ] [ -H | -S | -L ] [ -f config ] [ -p phc-device ] [ -s ] [ -l print-level ] [ -q ] [ -v ] [ -i interface ] ...

选项

-A 自动选择延迟机制,初始为E2E,当收到对端的delay request的时候切换到P2P.

-E 选择延迟 请求-响应机制E2E。默认机制

-P 选择对端延迟机制P2P.

-2 IEEE802.3网络传输

-4 UDP IPv4传输 默认值

-6 UDP IPv6 传输

-H 硬件打时间戳

-S 软件打时间戳

-L legacy硬件时间戳

-f config 读取配置文件

-p phc设备,硬件时间戳的设备 /dev/ptp0

-s 只作为从时钟

-l 打印级别,级别是根据syslog定义的。默认为6 LOG_INFO

-q 不打印消息到系统日志

-v 打印消息的标准输出

-i interface 确定一个ptp的端口。

-h 显示帮助信息

配置文件

配置文件分为几个部分,每个部分的前面都是中括号包含名字,后面每一行都是名字和相应的设置组成。空行和以#开头的行忽略。

全局配置部分[global]设置程序的参数,时钟的参数,和端口的参数。其他的部分是端口特有的,端口特头的设置会覆盖默认全局的设置。端口的设置部分以端口的名字开头,例如[eth0].

端口参数选项

logAnnounceInterval

Announce消息的平均时间间隔。时间间隔越小,ptp4l对变化的反应也越快。时间间隔在整个域中是一致的。它表示为2的多少次幂,单位是秒,默认值是1(2秒).

logSyncInterval

Sync消息的平均时间间隔。时间间隔越小越可能改善本地时钟的精度。表示为2的多少次幂,单位是秒。默认值是0,(1秒).

logMinDelayReqInterval

Delay_req消息允许的最小时间间隔。间隔越小,ptp4l对于path_delay的计算越快。表示为2的多少次幂,单位是秒。默认值是0(1秒).

logMinPdelayReqInterval Pdelay_req消息允许的最小时间间隔。表示为2的多少次幂。默认值是0(1秒).

announceReceiptTimeout

在最后一个Announce消息过期前丢失Announce消息的数量。默认值是3.

transportSpecific

传输域中的特殊值,值是0-255,默认是0.

path_trace_enabled

跟踪Announce消息的路由,默认是不使能的。

follow_up_info

此选项如果使能,将在Follow_Up消息里面包含802.1AS数据,默认是禁止的。

delay_mechanism

延迟机制,E2E, P2P还是Auto, 默认值是E2E

network_transport

网络传输方式。默认值为UDPv4

程序和时钟参数选项

twoStepFlag

slaveOnly

priority1

priority2

clockClass

clockAccuracy

offsetScaledLogVariance

domainNumber

free_running

freq_est_interval

assume_two_step

tx_timestamp_retries

clock_servo

pi_proportional_const

pi_integral_const

pi_offset_const

ptp_dst_mac

p2p_dst_mac

logging_level

verbose

use_syslog

time_stamping

 

生成配置文件

echo -e "[global]\ntx_timestamp_timeout\t1000\n" > ptp4l.cfg

echo -e "sanity_freq_limit\t0\n" >> ptp4l.cfg

echo -e "logSyncInterval\t0\n" >> ptp4l.cfg

echo -e "assume_two_step\t0\n" >> ptp4l.cfg

echo -e "twoStepFlag\t0\n" >> ptp4l.cfg

echo -e "time_stamping\tonestep\n" >> ptp4l.cfg

 

启动ptp4l

/tmp # ptp4l -m -q -l 7 -p /dev/ptp0 -s -f ptp4l.cfg -i ieth

日志
ptp4l[76381.759]: config item (null).assume_two_step is 0
ptp4l[76381.759]: config item (null).check_fup_sync is 0
ptp4l[76381.759]: config item (null).tx_timestamp_timeout is 1000
ptp4l[76381.759]: config item (null).clock_servo is 0
ptp4l[76381.759]: config item (null).clock_type is 32768
ptp4l[76381.759]: config item (null).clock_servo is 0
ptp4l[76381.759]: config item (null).clockClass is 248
ptp4l[76381.759]: config item (null).clockAccuracy is 254
ptp4l[76381.759]: config item (null).offsetScaledLogVariance is 65535
ptp4l[76381.759]: config item (null).productDescription is ';;'
ptp4l[76381.759]: config item (null).revisionData is ';;'
ptp4l[76381.759]: config item (null).userDescription is ''
ptp4l[76381.759]: config item (null).manufacturerIdentity is '00:00:00'

 

ptp4l 中支持的servo, 比例积分控制器(PI), 线性回归(linreg)。比例积分控制器(PI)是一种常用的自动控制器,请参考自动控制理论中PID控制器。

posted @ 2019-12-13 22:49  ryankang  阅读(13717)  评论(0编辑  收藏  举报