Linuxカーネル4.4.15を実行するシステムモジュール(SOM)を含むカスタムボードがあります。ボードには小さなバッテリーでバックアップされるRTCがあります。
私のボードは現在ネットワーク接続なしで動作しています。
2つの異なるSOMがあります。 SOM Aを接続してデバイスを起動すると
$date returns date in Feb 2020
$hwclock returns same date/time in Feb 2020
システム時間とRTCを更新してからプラグを抜いて再起動すると、両方のコマンドは同じ日付(2020年2月)で返されます。
SOM Bを接続してデバイスを起動すると、起動時に返された日付が2020年5月の日付/時刻(実際には昨日)であることを除いて、結果は同じになります。
起動時にRTCから時間を再読み込みするのに問題があるようです。その後、システムはどこかに保存された日付/時刻を取得します。しかし、それはどこですか?
/etc/init.d(すべてのrc.Xフォルダに接続されている)からhwclock.shスクリプトも削除しました。
また、他の呼び出し元がrtcを設定できないようにhwclockバイナリを/ sbin /から別の場所に移動しましたが、起動後に手動で実行すると、まだ間違った日付/時刻(2020年2月または昨日)があるようです。これもおかしいようです。 hwclockバイナリが正常な位置にない場合、どのようにシステムクロックとhwclockが電源を切った後に同じ時間を報告できますか?
ファイルに時間を記録し、それを使用して起動時にシステム時間を設定できる他のサービス/場所はありますか?
編集する:
システムとRTC時間の設定
$ cat /proc/driver/rtc
rtc_time : 00:00:16
rtc_date : 2020-05-15
alrm_time : 00:00:00
alrm_date : 1970-01-01
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
電源サイクルが完了し、RTCが復元されました。
$cat /proc/driver/rtc
rtc_time : 14:54:22
rtc_date : 2020-05-14
alrm_time : 00:00:00
alrm_date : 1970-01-01
alarm_IRQ : no
alrm_pending : no
update IRQ enabled : no
periodic IRQ enabled : no
periodic IRQ frequency : 1
max user IRQ frequency : 64
24hr : yes
編集2:
再起動したときに実際にテストしたのは、電源コードを抜いて数秒待ってから再接続するだけでした。 (組み込みLinux機器なので珍しい現象ではありません。) ところで時間を今日に設定して再起動コマンドを出すと、(電源が切れずに)設定した時間(真夜中)と同時に再開されてから次の時間になれば電源周期が完了すると、同じ日付(今日)で再開されます。
だから、再起動プロセスのどの部分がOSがどこかで時間を節約するように強制すると思います。次に、起動時にrtcを読み取る代わりにrtcを設定します。