Linux時間同步(PPS、PTP、chrony)分析筆記

1 PPS(pulse per second)

1.1 簡介

LinuxPPS provides a programming interface (API) to define in the system several PPS sources.


PPS means "pulse per second" and a PPS source is just a device which provides a high precision?signal each second so that an application can use it to adjust system clock time.

A PPS source can be connected to a serial port (usually to the Data Carrier Detect pin) or to a parallel port (ACK-pin) or to a special CPU's GPIOs (this is the common case in embedded systems) but in each case when a new pulse arrives the system must apply to it a timestamp
and record it for userland.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????????????《<kernel_src>/Documentation/pps/pps.txt》

1.2 PPS時間同步信號的輸入源

1.2.1?串口信號中的DCD(Data Carrier Detect)信號

1.2.1.1 普通串口

以drivers/tty/serial/amba-pl010.c驅動為例

pl010_int();-> pl010_modem_status();-> uart_handle_dcd_change();-> ld->ops->dcd_change();-> pps_tty_dcd_change();-> pps_event()

1.2.1.2 USB串口

以drivers/usb/serial/pl2303.c驅動為例

pl2303_read_int_callback();-> pl2303_update_line_status();-> usb_serial_handle_dcd_change();-> ld->ops->dcd_change();-> pps_tty_dcd_change();-> pps_event()

1.2.3?GPIO

1.2.3.1 在設備樹中指定使用哪個GPIO

例如

    pps {compatible = "pps-gpio";pinctrl-names = "default";pinctrl-0 = <&pinctrl_pps>;gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;status = "okay";};
1.2.3.2 驅動

drivers/pps/clients/pps-gpio.c

pps_gpio_irq_handler();-> pps_event()

1.2.4?并口

drivers/pps/clients/pps_parport.c

parport_irq();-> pps_event();

1.2.5 PTP

1.2.5.1 判斷網卡是否打開PPS功能

/sys/class/ptp/ptp0/pps_available

????????This file indicates whether the PTP hardware clock supports a Pulse Per Second to the host CPU.????????

/sys/class/ptp/ptp0/pps_enable

????????This write-only file enables or disables delivery of PPS events to the Linux PPS subsystem.

1.2.5.2 驅動

以Intel的網卡驅動為例

drivers/net/ethernet/intel/igb/igb_main.c

igb_tsync_interrupt();-> ptp_clock_event();-> pps_event();

1.3 文件操作接口/dev/ppsX

/** Char device stuff*/static const struct file_operations pps_cdev_fops = {.owner      = THIS_MODULE,.llseek     = no_llseek,.poll       = pps_cdev_poll,.fasync     = pps_cdev_fasync,.compat_ioctl   = pps_cdev_compat_ioctl,.unlocked_ioctl = pps_cdev_ioctl,.open       = pps_cdev_open,.release    = pps_cdev_release,
};

1.4 在chrony服務中使用PPS作為時間源

在配置文件/etc/chrony/chrony.conf中添加以下內容

refclock SHM 0 poll -2 refid GPS precision 1e-1 offset 0.9999 delay 0.2
refclock PPS /dev/pps0 lock NMEA refid PPS

執行"chronyc sources" 命令,出現以下結果表示配置成功

# chronyc sources | grep PPS
#- PPS                           0   4    77    16   -309ms[ -309ms] +/-   29ms

2 PTP(precise time protocol; IEEE 1588協議)

2.1 簡介

IEEE 1588 addresses the clock synchronization requirements of measurement and control systems. The protocol supports system-wide synchronization accuracy in the sub-microsecond range with minimal network and local clock computing resources.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 《Intel ? Ethernet Controller I350 Datasheet》P457

2.2 判斷網卡是否支持PTP

PTP功能需要網卡硬件支持,可通過ethtool -T? xxx來查看

出現以下信息,表示網卡硬件支持PTP

# ethtool  -T enp0s31f6
Time stamping parameters for enp0s31f6:
Capabilities:hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)software-system-clock (SOF_TIMESTAMPING_SOFTWARE)hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:off                   (HWTSTAMP_TX_OFF)on                    (HWTSTAMP_TX_ON)

2.3?在chrony服務中使用PTP作為時間源

在配置文件/etc/chrony/chrony.conf中添加以下內容

refclock PHC /dev/ptp0 poll 2

執行"chronyc sources" 命令,出現以下結果表示配置成功?

# chronyc sources | grep PHC
#x PHC2                          0   2   377     5   +39.6s[ +39.6s] +/- 1139us

縮寫:

????????PHC: PTP hardware clock?

2.4 /sys/class/ptp/ptpN/

2.5 擴展知識:虛擬機和物理機之間的時間同步(ptp_kvm)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

每日一題 2673使二叉樹所有路徑值相等的最小代價

2673. 使二叉樹所有路徑值相等的最小代價 題目描述&#xff1a; 給你一個整數 n 表示一棵 滿二叉樹 里面節點的數目&#xff0c;節點編號從 1 到 n 。根節點編號為 1 &#xff0c;樹中每個非葉子節點 i 都有兩個孩子&#xff0c;分別是左孩子 2 * i 和右孩子 2 * i 1 。 樹…

Java緩存簡介

內存訪問速度和硬盤訪問速度是計算機系統中兩個非常重要的性能指標。 內存訪問速度&#xff1a;內存是計算機中最快的存儲介質&#xff0c;它的訪問速度可以達到幾納秒級別。內存中的數據可以直接被CPU訪問&#xff0c;因此讀寫速度非常快。 硬盤訪問速度&…

學習和工作的投入產出比(節選)

人工智能統領全文 推薦包含關于投入、產出、過剩、市場關注、案例、結果和避雷等主題的信息&#xff1a; 投入與產出&#xff1a; 投入和產出都有直接和間接兩類常見形式。常見的四種組合是&#xff1a;直接投入、直接產出、間接投入、間接產出。 過剩&#xff1a; 過剩是一個重…

力扣SQL50 無效的推文 查詢

Problem: 1683. 無效的推文 思路 &#x1f468;?&#x1f3eb; 參考 char_length(str)&#xff1a;計算 str 的字符長度length(str)&#xff1a;計算 str 的字節長度 Code select tweet_id from Tweets where char_length(content) > 15;

C++與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累

C與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累 以下內容來自&#xff1a;C與 Fluke5500A設備通過GPIB-USB-B通信的經驗積累 - JMarcus - 博客園 (cnblogs.com)START 1.需要安裝NI-488.2.281&#xff0c;安裝好了之后&#xff0c;GPIB-USB-B的驅動就自動安裝好了 注意版本…

動態規劃(算法競賽、藍橋杯)--單調隊列滑動窗口與連續子序列的最大和

1、B站視頻鏈接&#xff1a;E11【模板】單調隊列 滑動窗口最值_嗶哩嗶哩_bilibili 題目鏈接&#xff1a;滑動窗口 /【模板】單調隊列 - 洛谷 #include <bits/stdc.h> using namespace std; const int N1000010; int a[N],q[N];//q存的是元素的下標 int main(){int n,k;…

unity學習(41)——創建(create)角色腳本(panel)——UserHandler(收)+CreateClick(發)——創建發包!

1.客戶端的程序結構被我精簡過&#xff0c;現在去MessageManager.cs中增加一個UserHandler函數&#xff0c;根據收到的包做對應的GameInfo賦值。 2.在Model文件夾下新增一個協議文件UserProtocol&#xff0c;內容很簡單。 using System;public class UserProtocol {public co…

金融短信群發平臺具有那些特點

金融短信群發平臺的特點主要包括以下幾個方面&#xff1a; 1.高效性&#xff1a;金融短信群發平臺能夠快速地發送大量的短信&#xff0c;使得金融信息能夠迅速傳達給目標客戶&#xff0c;保證了信息的及時性和有效性。 2.安全性&#xff1a;金融短信群發平臺對于信息的安全性非…

藍橋杯練習系統(算法訓練)ALGO-995 24點

資源限制 內存限制&#xff1a;256.0MB C/C時間限制&#xff1a;1.0s Java時間限制&#xff1a;3.0s Python時間限制&#xff1a;5.0s 問題描述 24點游戲是一個非常有意思的游戲&#xff0c;很流行&#xff0c;玩法很簡單&#xff1a;給你4張牌&#xff0c;每張牌上有數…

【JS】sort方法的基本使用與雙重、多重排序:對象數組按照多個對象屬性進行排序

【JS】對象數組按照多個對象屬性進行排序&#xff08;sort方法&#xff09; 一、sort():用于對數組的元素進行排序,并返回數組&#xff0c;arr.sort()默認為升序排列二、sort()用法三、雙重、多重排序&#xff1a;對象數組按照多個對象屬性進行排序&#xff08;sort方法&#x…

設備樹學習(DOING)

我的理解本質上還是復用。尤其是嵌入式領域&#xff0c;設備多種多樣&#xff0c;但是很多設備接口都是標準的&#xff0c;或者大同小異。以前驅動開發可能每個設備商都去抄別家的搞進內核&#xff0c;這樣造成了大量的垃圾代碼。后面linux內核就把這些做成公共庫抽象出來&…

SpringBoot整合Kafka

SpringBoot整合Kafka的步驟如下&#xff1a; 添加依賴&#xff1a;在SpringBoot項目的pom.xml文件中添加Kafka的依賴。 <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>版本號…

常見的遞歸Java實現

形如 public static void test(int n) {if (n > 2) {test(n - 1);}System.out.println("n" n); }重要規則 執行一個方法時&#xff0c;就創建一個新的受保護的獨立空間&#xff08;棧空間&#xff09;方法的局部變量是獨立的&#xff0c;不會相互影響如果方法中…

【教程】移動互聯網時代的APP上架流程和要點

目錄 摘要 引言 正文 一、應用商店注冊 二、準備APP材料 三、打包上傳App 摘要 本文將介紹移動應用程序上架的基本流程和要點&#xff0c;包括應用商店注冊、APP材料準備、打包上傳App、APP審核以及發布APP的詳細步驟。此外&#xff0c;還會提到利用appuploder工具簡化i…

Gradio學習(五)—————學習一下布局Column的使用

今天學一下布局 非常簡單row就是行column就是列 如下就是兩行兩列 scale就是縮放比例&#xff0c;如下按鈕類scale4&#xff0c;而文本框類scale1&#xff0c;按鈕類顯示寬度就是文本框類寬度的四倍 import gradio as gr with gr.Blocks() as demo:with gr.Row():with gr.Colu…

Spring Cloud 實戰系列之 Zuul 微服務網關搭建及配置

一、創建SpringBoot項目 用mavan搭建也可以。&#xff08;重要的是后面pom里應該引入那些依賴&#xff0c;application.yml怎么配置&#xff09; 由于開始構建項目時選擇了Eureka Server&#xff0c;所以pom.xml中不需要手動添加依賴了 首先在啟動類SpringcloudApplicatio…

SpringBoot項目連接Redis報錯:Connection refused: no further information

今天在使用SpringBoot連接Redis時發生了報錯 明明Jedis能夠連接成功為什么StringRedisTemplate就不行? 然后在網上找了一下說是關閉防火墻或者修改配置文件但是都不管用 最后發現是Redis在SpringBoot3之后yml的配置方式發生了改變 相較于之前多了一個前綴, 由于我剛開始沒有…

項目風險管理的前提是對風險的認知

大家好&#xff0c;我是不會魔法的兔子&#xff0c; 一枚北京執業律師&#xff0c;創建[項目管理者的法小院兒]&#xff0c;持續從法律的角度分享項目管理中的風險問題及預防&#xff0c;讓項目管理者能夠提早發現與解決項目執行過程中的風險&#xff0c;同時歡迎大家一起交流…

論文解讀--Mutual Interference Mitigation in PMCW Automotive Radar

PMCW汽車雷達的相互干擾抑制 摘要 針對相位調制連續波(PMCW)毫米波(mmWave)汽車雷達系統中存在的相互干擾問題進行了研究。對先進駕駛輔助系統(ADAS)的需求日益增長&#xff0c;導致配備在同一頻段工作的毫米波雷達系統的車輛激增&#xff0c;導致相互干擾&#xff0c;可能會降…

WPF 滑動條樣式

效果圖&#xff1a; 淺色&#xff1a; 深色&#xff1a; 滑動條部分代碼&#xff1a; <Style x:Key"RepeatButtonTransparent" TargetType"{x:Type RepeatButton}"><Setter Property"OverridesDefaultStyle" Value"true"/&g…