Skip to content

# 13.2. ptp时间同步

## 13.2.1. 功能

该软件包含两个程序：ptp4l和phc2sys。这两个软件结合使用，就可以实现从master获取时间，同步J6X的PHC时间和Linux系统时间。

## 13.2.2. ptp4l使用方法

### 13.2.2.1. 命令行参数

ptp4l支持gptp功能，可以作为master，也可以作为slave；如果作为slave，可以从master获取时间，同步J6X的PHC时间和RTC时间。

可以通过ptp4l -h查看帮助信息：

    root@:~# ptp4l -h

    usage: ptp4l [options]

     Delay Mechanism

     -A        Auto, starting with E2E
     -E        E2E, delay request-response (default)
     -P        P2P, peer delay mechanism

     Network Transport

     -2        IEEE 802.3
     -4        UDP IPV4 (default)
     -6        UDP IPV6

     Time Stamping

     -H        HARDWARE (default)
     -S        SOFTWARE
     -L        LEGACY HW

     Other Options

     -f [file] read configuration from 'file'
     -i [dev]  interface device to use, for example 'eth0'
               (may be specified multiple times)
     -p [dev]  Clock device to use, default auto
               (ignored for SOFTWARE/LEGACY HW time stamping)
     -d [pps dev]  eth pps device to use
     -s        slave only mode (overrides configuration file)
     -l [num]  set the logging level to 'num'
     -m        print messages to stdout
     -q        do not print messages to the syslog
     -v        prints the software version and exits
     -h        prints this message and exits

### 13.2.2.2. 配置文件的使用

ptp4l可以通过-f参数指定配置文件。

配置文件按段划分，空行和#开头的行会被忽略。

有三种段类型：

1. [global]段，用来配置program选项，clock选项，默认port选项。

2. port段使用被配置的网口的名字，如[eth0]段，其配置的选项会覆盖[global]段中默认port选项。port段可以为空内容，作用只是指定网口，这样命令行中不必使用-i选项。

3. [unicast_master_table]段，配置单播table。

配置文件的详细信息可以参考：https://linuxptp.nwtime.org/documentation/ptp4l/

### 13.2.2.3. automotive配置示例

automotive-master.cfg:

    #
    # Automotive Profile example configuration for master containing those
    # attributes which differ from the defaults.  See the file, default.cfg, for
    # the complete list of available options.
    #
    [global]
    # Options carried over from gPTP.
    gmCapable       1
    priority1       248
    priority2       248
    logSyncInterval     -3
    syncReceiptTimeout  3
    neighborPropDelayThresh 800
    min_neighbor_prop_delay -20000000
    assume_two_step     1
    path_trace_enabled  1
    follow_up_info      1
    transportSpecific   0x1
    ptp_dst_mac     01:80:C2:00:00:0E
    network_transport   L2
    delay_mechanism     P2P
    #
    # Automotive Profile specific options
    #
    BMCA            noop
    masterOnly      1
    inhibit_announce    1
    asCapable               true
    inhibit_delay_req       1

automotive-slave.cfg:

    #
    # Automotive Profile example configuration for slaves containing those
    # attributes which differ from the defaults.  See the file, default.cfg, for
    # the complete list of available options.
    #
    [global]
    #
    # Options carried over from gPTP.
    #
    gmCapable       1
    priority1       248
    priority2       248
    logSyncInterval     -3
    syncReceiptTimeout  3
    neighborPropDelayThresh 800
    min_neighbor_prop_delay -20000000
    assume_two_step     1
    path_trace_enabled  1
    follow_up_info      1
    transportSpecific   0x1
    ptp_dst_mac     01:80:C2:00:00:0E
    network_transport   L2
    delay_mechanism     P2P
    #
    # Automotive Profile specific options
    #
    BMCA            noop
    slaveOnly       1
    inhibit_announce    1
    asCapable               true
    ignore_source_id    1
    # Required to quickly correct Time Jumps in master
    step_threshold          1
    operLogSyncInterval     0
    operLogPdelayReqInterval 2
    msg_interval_request     1
    servo_offset_threshold   30
    servo_num_offset_values  10

## 13.2.3. phc2sys使用方法

phc2sys运行后，可以将Linux系统时间，设置为J6X的PHC时间。

可以通过phc2sys –h查看使用说明：

    root@:~# phc2sys -h

    usage: phc2sys [options]

     automatic configuration:
     -a             turn on autoconfiguration
     -r             synchronize system (realtime) clock
                    repeat -r to consider it also as a time source
     manual configuration:
     -c [dev|name]  slave clock (CLOCK_REALTIME)
     -d [dev]       master PPS device
     -s [dev|name]  master clock
     -O [offset]    slave-master time offset (0)
     -w             wait for ptp4l
     common options:
     -f [file]      configuration file
     -E [pi|linreg] clock servo (pi)
     -P [kp]        proportional constant (0.7)
     -I [ki]        integration constant (0.3)
     -S [step]      step threshold (disabled)
     -F [step]      step threshold only on start (0.00002)
     -R [rate]      slave clock update rate in HZ (1.0)
     -N [num]       number of master clock readings per update (5)
     -L [limit]     sanity frequency limit in ppb (200000000)
     -M [num]       NTP SHM segment number (0)
     -u [num]       number of clock updates in summary stats (0)
     -n [num]       domain number (0)
     -x             apply leap seconds by servo instead of kernel
     -z [path]      server address for UDS (/var/run/ptp4l)
     -l [num]       set the logging level to 'num' (6)
     -t [tag]       add tag to log messages
     -m             print messages to stdout
     -q             do not print messages to the syslog
     -v             prints the software version and exits
     -h             prints this message and exits

## 13.2.4. 综合示例

### 13.2.4.1. 命令行参数

下面示范如何通过ptp4l和phc2sys，将master的网卡时间同步到slave的网卡时间和系统时间。用户需要保证master设备和slave设备之间网络联通。

Master端执行如下命令:

    ptp4l -i eth0 -f /usr/conf/automotive-master.cfg -m -l 7

Slave端执行如下命令:

    ptp4l -i eth0 -f /usr/conf/automotive-slave.cfg -m -l 7 > ptp4l.log &
    phc2sys -s eth0 -c CLOCK_REALTIME --transportSpecific=1 -m --step_threshold=1000 -w > phc2sys.log &

### 13.2.4.2. Log示例

Slave端log:

    ptp4l[8330.884]: PI servo: sync interval 1.000 kp 0.700 ki 0.300000
    ptp4l[8330.885]: master offset         21 s3 freq    -391 path delay       690
    ptp4l[8330.998]: port 1: delay timeout
    ptp4l[8330.999]: delay   filtered        689   raw        687
    ptp4l[8331.884]: master offset         35 s3 freq    -371 path delay       689
    ptp4l[8332.885]: master offset         47 s3 freq    -349 path delay       689
    ptp4l[8333.885]: master offset         50 s3 freq    -332 path delay       689
    ptp4l[8334.885]: master offset         22 s3 freq    -345 path delay       689

Master端log:

    ptp4l[3469.136]: config item /var/run/ptp4l.inhibit_delay_req is 1
    ptp4l[3469.136]: config item (null).uds_address is '/var/run/ptp4l'
    ptp4l[3469.136]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE
    ptp4l[3469.136]: config item (null).slaveOnly is 0
    ptp4l[3469.136]: port 1: received link status notification
    ptp4l[3469.136]: interface index 2 is up
    ptp4l[3469.261]: port 1: master sync timeout
    ptp4l[3469.386]: port 1: master sync timeout
    ptp4l[3469.511]: port 1: master sync timeout
    ptp4l[3469.636]: port 1: master sync timeout
    ptp4l[3469.761]: port 1: master sync timeout
    ptp4l[3469.886]: port 1: master sync timeout