3.7. PTPを用いた時刻同期#
3.7.1. Web UIを用いたPTPの設定#
Web UI には、PTP Settings
というタブがあります。このタブを開くと 5 つのボタンが表示されます。以下に各ボタンの機能について説明します。
3.7.1.1. Update System Time#
HTTP リクエストを介してローカル時刻を取得し、システム時刻を更新します。
等価なコマンドは以下のとおりです。
sudo date -s "$(wget -qs0- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" && sudo phc_ctl /dev/ptp0 set
3.7.1.2. Start PTP-based Synchronization#
eth0 で ptp4l スレーブ (クライアント) プログラムを起動します。
等価なコマンドは以下のとおりです。
sudo ptp41 -i eth0 -s
3.7.1.3. Sync System Clock to PHC#
PHC 時間に基づいてシステム クロックを更新するプログラムを起動します。
等価なコマンドは以下のとおりです。
sudo phc2sys -a -r
3.7.1.4. Stop PTP-based Synchronization#
ptp4l スレーブ プログラムを停止します。
等価なコマンドは以下のとおりです。
sudo pkill -x "ptp41"
3.7.1.5. Stop PHC to System#
PHCベースのシステムを停止します。
等価なコマンドは以下のとおりです。
sudo pkill -x "phc2sys"
3.7.2. PTPのテスト#
PTP を使用するには、ホスト PC がマスター モード (-m
フラグ) で ptp4l
を実行し、本ボードがスレーブ モードになっている必要があります。本ボードは、上記の表に示すように、Web GUI を介して適切な PTP プログラムを起動できます。以下の手順により、PTP を起動して機能を確認していきます。
3.7.2.1. ホスト上でPTPマスターを起動する#
ホスト上で次のコマンドを発行すると、PTP マスターを起動できます。
sudo ptp41 -i enp2s0f1 -m -S -A # replace enp2s0f1 with the proper interface
3.7.2.2. デバイス上でPTPスレーブを起動する#
Web GUI の PTP タブで Start PTP-based Synchronization
をクリックします。
3.7.2.3. PTPベースのストリーミングが機能することを確認する#
Web GUI の RTP Control
タブで、Custom Timestamp
と Start of Frame
を有効にします。次に、ストリーミングのセクションに従ってストリーミングを開始します。その後、ホスト PC で次のコマンドを使用して、パケットに適切な RTP 情報が含まれていることを確認します。
sudo tcpdump -i enp2s0f1 -T rtp -x | grep "0x0020" | awk '{print "0x"$3$4}'
これにより、現在のエポック秒が HEX 形式で出力されます。これは、Web サイト epoch converter を用いて比較することで確認できます。
たとえば、0x66bb12ac
を取得した場合、データに埋め込まれたタイムスタンプは 2024-8-13 Tuesday 08:00:44 (GMT)
です。
注釈
カスタム タイムスタンプは次のように構成されます: 最大 合計 96 bit
48b - 秒を表します(先頭から48bit)
32b - ナノ秒を表します(続く32bit)
16b - ナノ秒の小数部表現(最後の16bit)
したがって、Custom Timestamp
と共に使用した場合、RTP ヘッダーには次のデータ セットが含まれます。
RTP ヘッダーのtimestamp - 秒を表す48bitのうち、先頭の32bit
RTPヘッダーのSSRC_ID - 先頭の16bitは秒を表す48bitの下位部分、残りはナノ秒表現の上位部分
RTP ヘッダーの CSRC_ID - ナノ秒表現の下位部分に 16ビット、ナノ秒の小数部表現に 16 ビット
3.7.2.4. システムクロックがPTP経由で同期していることを確認する#
Sync System Clock to PHC
ボタンを押すと、システム クロックが同期されます。2 つのマシンで次のコマンドの出力を比較することで、2 つのクロックが同期していることを確認できます。
watch -n 0.1 date +%s. %N
ボード上で次のコマンドを発行すると、間違ったクロックをシミュレートできます。
sudo date +%T -s "15:00:00"
'With synchronization'の結果では、ホストとボードのシステムクロックが一致していることを確認できます。一方、'Without synchonization'の場合は、ホストとボードのシステムクロックが異なります。