現在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を実行しており、同様の動作を経験しています(私の場合は事前定義された日付が異なりますが)。私が見つけたものは次のとおりです。
前述のように、
fake-hwclock
これはRTCデータの最初の確実なソースです。fixrtc
initramfsというフックと対応するカーネルコマンドラインパラメータがあります。このパラメーターが設定されると、初期ユーザースペースフックはdumpe2fs
ルートファイルシステムの最後のマウントと作成時間を確認します。時計の設定にはより大きな時間が使用されます。fixrtc
スクリプトが存在しないか、fixrtc
パラメータが設定されていない場合。 Systemdが機能し、ビルドタイムスタンプを使用して時計を設定します。最新のDebian / Ubuntuパッケージングスクリプトは、最新のdebian/changelog
エントリからこのビルドタイムスタンプを抽出します。ビルドされたsystemdバイナリを使用してこのビルドタイムスタンプを表示する方法が見つかりません。ただし、埋め込まれたタイムスタンプをカスタムタイムスタンプとして上書きすることはできます。これを行う方法は、というファイルを作成/タッチすることです
/usr/lib/clock-epoch
。場合、ファイルの変更時間がRTCデータのソースとして使用されます。