
私はRTL8125B-CG NICを持っていますが、製品ページは、PTP のハードウェア サポートを備えています。ただし、sudo ethtool -T
HW タイムスタンプ機能は検出されません。
私はドライバr8169
とr8125
Realtekのドライバ(両方ともGithubからのものそしてこれはRealtekのダウンロードページから)を試したが、成功しなかった。ソースコードのMakefileには、PTPサポートがデフォルトで有効になっていないことを示すフラグしかし、このフラグを有効にするとコンパイルできません(この問題)。
PTP サポートを有効にするために、経験のある方や、どうすればいいか知っている方はいらっしゃいますか?
Ubuntu 20.04 と5.11.0-36-generic
カーネルを実行しています。
答え1
答えについては、Github の問題を参照してください。参考:
簡単に言うと、コンパイルの問題は、最新バージョンのドライバー (9.006.04) で Realtek がspinlock_t lock
のメンバー変数を削除したstruct rtl8125_private
が、それに応じて PTP ファイルを更新しなかったことです。したがって、すべてのspin_lock_irqsave
およびspin_lock_irqrestore
ルーチンはコンパイルされません。これを修正するには、次の 2 つの方法があります。
- PTPファイル内のすべてのルーチンをコメントアウトする
spin_lock_irqsave
か、spin_lock_irqrestore
spinlock_t lock
にメンバーを戻しますstruct rtl8125_private
。
IRQ がドライバーの機能にとって不可欠かどうかは不明なので、後者の方がおそらく安全です。とはいえ、私は両方のソリューションを試しましたが、どちらもドライバーをコンパイルして PTP HW 機能を報告したので、どちらが最適かはわかりません。
しかし、HW タイムスタンプをスレーブ モードで使用できず、信頼できる結果を得るのに苦労しているため、ドライバーにはまだかなりバグがあると思います。ドライバーからタイムスタンプを取得しようとすると、ptp4l
タイムアウトになるという問題によく遭遇します。NIC を備えた 2 台のコンピューターがありますが、1 台のコンピューターではときどき動作しますが、もう 1 台ではほとんど動作しません。これは私の推測に過ぎませんが、PTP 機能は Realtek によって十分にテストされていないのではないかと思います。linuxptp
r8125