Sistema de tiempo de Linux y LinuxPTP

sistema de tiempo de linux

Linux necesita proporcionar tres funciones de "conocer la hora actual, calcular la duración del tiempo y recordar el tiempo".

Entre ellos, se sabe que la hora actual y la duración del tiempo de cálculo se pueden convertir entre sí hasta cierto punto. Es decir, la hora actual puede conocerse a partir de la temporización de UNIX Epoch.

El hardware general puede proporcionar los siguientes relojes de hardware:

  • RTC [Reloj real] Para PC, generalmente se mantiene con la batería de botón en la placa base para evitar que la información de la hora sea incorrecta después de un corte de energía. Para dispositivos integrados, no creo que este reloj se use generalmente. El reloj RTC generalmente debe leerse en el Kernel a través de la interfaz IO, luego actualizar el contador de tiempo interno y luego escribirlo durante el proceso de apagado. Para ganar tiempo. Para dispositivos integrados, creo que el reloj puede actualizarse mediante un protocolo de tiempo como NTP.
  • Temporizador [TImer] Esto es generalmente una interrupción de tiempo, y la precisión puede ser baja
  • Temporizador [contador] El contador de CPU incrementado es un registro. Lee súper rápido. Alta precisión y exactitud.

Estos son algunos conceptos comunes:

Época UNIX:
el año en que nació UNIX, como punto de partida de la temporización similar a UNIX, es decir, 1970-01-01.

UTC:
Tiempo Universal Coordinado, generalmente considerado zona horaria 0. La capa inferior de la computadora usa UTC para la interacción, y la zona horaria de conversión lógica se agrega a la capa de la aplicación.


La interfaz de tiempo de Linux utilizará estos parámetros:

timespec: Es una estructura con dos parámetros, uno es segundos y el otro es nanosegundos. Representa la precisión de ese nanosegundo.

clockid: Se utiliza para distinguir los diferentes sistemas de reloj utilizados:

[CLOCK_REALTIME]
Hora natural, es decir, el reloj de pared. Se puede configurar, puede saltar. Puede ir hacia adelante o hacia atrás.
Afectará a estos sistemas de tiempo: CLOCK_REALTIME_ALARM (solo cronometrado) / COARSE (lectura gruesa rápida) / TAI (sin salto)
Estos no se pueden configurar.

[CLOCK_MONOTONIC]
El reloj que aumenta monótonamente solo se puede ajustar hacia atrás, no hacia adelante. Por lo general, comience con el inicio del sistema.

[CLOCK_MONOTONIC_RAW]
no se puede ajustar.

linuxptp

Compruebe si la tarjeta de red tiene un reloj de hardware ptp

sudo ethtool -T  网卡名 [ 如eth0 ]  

ptp4l

ptp4l es una implementación de Precision Time Protocol (PTP) según el estándar IEEE 1588 para Linux. Implementa Boundary Clock (BC), Ordinary Clock (OC) y Transparent Clock (TC).

opciones:

-H
使用硬件时钟
Seleccione la marca de tiempo del hardware. Todos los puertos especificados por la opción -i y en el archivo de configuración deben estar conectados al mismo reloj de hardware PTP (PHC). Esta es la marca de tiempo predeterminada.

-S
Usar el reloj del software
Seleccione la marca de tiempo del software.

-f config
Instrucción de ubicación especificada
Lee la configuración del archivo especificado No se lee ningún archivo de configuración de forma predeterminada.

-i interfaz
especifica que el reloj de hardware ptp se seleccionará automáticamente si no se especifica. En general, una tarjeta de red solo puede tener un reloj ptp de hardware en /dev/ptp*, puede ver
Especificar un puerto PTP, se puede usar varias veces. Al menos un puerto debe especificarse mediante esta opción o en el archivo de configuración.

-s
pure pure slave mode
Habilita el modo clientOnly.

-m
imprime registro
Imprime mensajes en la salida estándar.

Ejemplo de archivo de configuración

Automotive MasterAutomotive profile example configuration for master containing those attributes which differ from the default configuration. Refer to ptp4l(8) for the complete list of available options.
[global]
# Options carried over from gPTP.
gmCapable               1     #让本地时钟可以作为grandmaster 使用802.1AS时钟
priority1               248    #本地时钟的priority1属性。它用于PTP服务器选择算法,较低的值优先。必须在0到255之间。默认值为128。
priority2               248    #本地时钟的priority2属性。它用于PTP服务器选择算法,较低的值优先。必须在0到255之间。默认值为128。
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
serverOnly              1
inhibit_announce        1
asCapable               true
inhibit_delay_req       1

Para ser honesto, el archivo de configuración no me sirve. En la actualidad, las instrucciones son relativamente simples. Puede ser necesario publicar y personalizar archivos de configuración para entornos y aplicaciones especiales. será mejor.
Por ejemplo, el TSN del automóvil necesita un archivo de configuración para indicar el uso del protocolo TSN AS.

phc2sys(8): sincroniza dos o más relojes

phc2sys es un programa que sincroniza dos o más relojes en el sistema. Por lo general, se utiliza para sincronizar el reloj del sistema con un reloj de hardware PTP (PHC), que a su vez está sincronizado por el programa ptp4l(8). Con la opción -a, los relojes para sincronizar se obtienen del demonio ptp4l en ejecución y el la dirección de sincronización sigue automáticamente los cambios de los estados del puerto PTP. También es posible la configuración manual. Cuando se usa la configuración manual, se admiten dos modos de sincronización, uno usa una señal de pulso por segundo (PPS) proporcionada por el reloj de origen y el otro modo lee la hora directamente del reloj de origen. Algunos relojes se pueden usar en ambos modos, el modo que sincronizará el sumidero de tiempo con mayor precisión depende de la implementación del hardware y del controlador.

El reloj de hardware de la tarjeta de red es PTP o PHC. El reloj utilizado por el programa es la función del CLOCK_REALTIME
phc2sys anterior para sincronizar entre diferentes relojes dentro de sí mismo.

Comandos de uso común:
-a
Lee los relojes para sincronizar desde la ejecución de ptp4l y sigue los cambios en los estados del puerto, ajustando la dirección de sincronización automáticamente. El reloj del sistema (CLOCK_REALTIME) no está sincronizado, a menos que también se especifique la opción -r. Parece que ser agregado
a través de relojes sincronizados ptp4l (sincronización suave o dura) ingrese al grupo de sincronización. Con quién sincronizar, -a dice que se selecciona automáticamente, pero no he considerado con quién más puede sincronizarse si no lo especifico.
Se señala aquí que -r significa activar CLOCK_REALTIME como un objeto de sincronización.

Es decir:

phc2sys -a -r

¿Está el reloj síncrono de ptp4l - sincronizado con - "CLOCK_REALTIME

-r
Sólo válido junto con la opción -a. Indica a phc2sys que también sincronice el reloj del sistema (CLOCK_REALTIME). De forma predeterminada, el reloj del sistema no se considera como una posible fuente de tiempo. Si desea que el reloj del sistema sea elegible para convertirse en una fuente de tiempo, especifique la opción -r dos veces.

Esto en realidad indica usar -rr

phc2sys -a -rr

-rr significa usar el reloj del sistema como fuente de reloj, y luego CLOCK_REALTIME–sincronizar con–>PHC

Cuando probé antes, no ejecuté phc2sys -a -rr en el host como gran maestro, por lo que aunque modifiqué la hora con la fecha en el host, la hora del esclavo no se modificó aunque ejecuté phc2sys -a -r .
Incluso se convierte en una Época UNXI después de que la sincronización del esclavo sea exitosa.

Resumir

【gran maestro】

phc2sys -a -rr # sys time --> ptp clock
ptp4l -i 网卡 -H -m # 指定接口(网卡) 使用硬件时钟 打印log

【esclavo】

ptp4l -i 网卡 -H -m -s# -s 表示仅仅以 slave的模式执行
phc2sys -a -r# ptp clock --> sys time

Supongo que te gusta

Origin blog.csdn.net/kuno_y/article/details/131978294
Recomendado
Clasificación