起動中のRaspberryPiの日時

起動中のRaspberryPiの日時

現在RaspbianPIで起動している間、Raspbianが「現在」の日付と時刻をどこから取得するのか疑問に思います。

システムには、I2Cを介して接続されたRTCデバイスがあります。起動中、システムサービスデバイスはRTCの日付/時刻を読み取り、正しい日付/時刻を取得します。

また、NTP クライアントが構成されます。

パッケージfake-hwclockがインストールされていますが、systemdでは無効になっています。

Raspbianが起動すると、/var/log/syslog日付/時刻を含むログメッセージが生成されますNov 3 ...。 Roaimaが書いたように期待していましたが、そうではありませJan 1 1970んでした...

サンプルメッセージは次の場所にあります。/var/log/syslog

Nov  3 18:16:51 raspberrypi kernel: [    0.000000] Booting Linux on physical CPU 0xf00

systemdがRTCスクリプトが実行されている場所に達すると(RTCデバイスがI2Cを介して接続されている)、日付と時刻を正しく設定します。

Oct 19 13:45:50 raspberrypi systemd[1]: Time has been changed

もしそうなら、質問はこれです。その奇妙な日付はNov 3どこに保存されていますか? !ファイルのどこかに保存されていますか?カーネルにハードコードされていますか?

答え1

Raspberry Piシステムにはバッテリー対応RTCがないため、電源を入れると時計は0(1970年1月1日UTC真夜中)で始まります。

開始時におおよそのリアルタイム時間を得るために、外部時間ソースにアクセスする前に、パッケージは終了時に保存された値にfake-hwclock時計を設定する方法を提供します。インターネットに接続されているコンピュータでは、NTPはデバイスの起動後に時計をより迅速かつ正確に設定できます。

答え2

RTCを含むRPiで同じ経験をしており、Stretchにアップグレードした後にNTPを実行している場合は、正しい日付/時刻を使用しないことがあります。

残念ながら、2016年11月3日の17:16:45のStretchがどこから来たのかはわかりませんが、今どのような状況でこのようなことが起こるのかがわかります。

良い状況と「再起動後の間違った日時」の状況を比較すると、WLAN接続が可能なときに11/3/2016 17:16:45が正しい時刻(RTCまたはNTPで)に変更されないようです。 RPiは接続されていますが、何らかの理由でインターネットにアクセスできません。

私はLinuxの分野に慣れていないので、これを証明する方法がわかりません。私はその質問に答えなかったことを知っていますが、それは役に立つと思いました。

答え3

私はRaspberry Pi 4デバイスでUbuntu 22.04を実行しており、同様の動作を経験しています(私の場合は事前定義された日付が異なりますが)。私が見つけたものは次のとおりです。

  1. 前述のように、fake-hwclockこれはRTCデータの最初の確実なソースです。

  2. fixrtcinitramfsというフックと対応するカーネルコマンドラインパラメータがあります。このパラメーターが設定されると、初期ユーザースペースフックはdumpe2fsルートファイルシステムの最後のマウントと作成時間を確認します。時計の設定にはより大きな時間が使用されます。

  3. fixrtcスクリプトが存在しないか、fixrtcパラメータが設定されていない場合。 Systemdが機能し、ビルドタイムスタンプを使用して時計を設定します。最新のDebian / Ubuntuパッケージングスクリプトは、最新のdebian/changelogエントリからこのビルドタイムスタンプを抽出します。

  4. ビルドされたsystemdバイナリを使用してこのビルドタイムスタンプを表示する方法が見つかりません。ただし、埋め込まれたタイムスタンプをカスタムタイムスタンプとして上書きすることはできます。これを行う方法は、というファイルを作成/タッチすることです/usr/lib/clock-epoch。場合、ファイルの変更時間がRTCデータのソースとして使用されます。

関連情報