Arduino YUNのOpenWRT日付(ミリ秒)

Arduino YUNのOpenWRT日付(ミリ秒)

私はArduino YUNでOpenWRTを使用しており、ミリ秒(DD / MM / YYYY h:min:sec:ms)単位の正確な日付を取得するためにタイムサーバーを介して時間を取得しようとしています。

残念ながら、ナノ秒ではなくdate +%Nナノ秒だけが返されます%N+%NOpenWRTの日付は含まれていないと聞きました。

それでは、私が望む日付(ミリ秒を含む)を取得する方法はありますか?

ベストアンサー1

OpenWRTではdateそうですbusybox。制限がありますが、厳密に言えば、それらの1つではありません。根本的な問題はlibc(uClibc)です。この GNU strftime 拡張はサポートされていません。。 (glibcも同様ですが、これについては後で詳しく説明します。)

基本的にはあるはずluaですが役に立たない基本以外のモジュールもあります。

hwclockRTC(ハードウェアクロック)を比較/設定する必要がありますgettimeofday()が、1秒未満の解像度を出力しません(RTCにアクセスするのが遅すぎて便利ではない可能性があります)。さらに、OpenWRTは古代のrdate1秒単位の解像度のみを提供します。

から直接正確なタイムスタンプを得るための直接的な方法はないようです/proc。最も有用なタイムスタンプは、/proc/timer_listナノ秒単位の稼働時間(ライン3)です(解像度はプラットフォームによって異なります)。

ビジボックスがsetで構築されている場合は、CONFIG_BUSYBOX_CONFIG_ADJTIMEXそれを使用してカーネルクロックを読み取ることができるはずですadjtimex(ビジボックスバージョンは両方標準adjtimexのさまざまなパラメータとさまざまな出力。

一般バージョン、adjtimex -p出力の最後の行:

   raw time:  1416419719s 146628us = 1416419719.146628

Busyboxバージョン、adjtimex(いいえ-p!)、最後の3行:

   [...]
   time.tv_sec:  1416420386
   time.tv_usec: 732653
   return value: 0 (clock synchronized)

Goldilocksは、OpenWRTクロスビルド設定があると仮定するのに最適なソリューションです(強くお勧めします!)。あなたのcoreutils 日付coreutilsがglibcを認識しても、まったくglibcではないため、ソリューションは機能します。これには独自の独立した実装(glibcから派生)が付属しており、これを使用して基本レイヤをstrftimeラップ(通過)してさまざまな拡張をサポートします(そうでない場合はuClibcバージョンに置き換えられます)。strftime_case()strftime

glibc(現在2.23まで)がそれをサポートしていない場合でも、%N正式なglibcバージョンから派生したcoreutilsはいくつかの異なる変更を追加します。バリアントとパッチのバージョンがたくさんあります(bashとgawkのバージョンを含む)。strftime()%N%:zstrftime()

おすすめ記事