Armadilloフォーラム

システムクロックを「1970-01-01 00:00」に設定できない

masaya_yoshitomi

2024年8月1日 14時00分

------------------------------------------------------------------------------------
■環境
------------------------------------------------------------------------------------
【動作環境】
 ・OS:Debian GNU/Linux 10 (buster)
 ・Boot:u-boot-x1-at23.bin
 ・カーネル:uImage-x1-v4.9-at26
 ・DTB:armadillo_iotg_g3_m1-v4.9-at26.dtb
 ・ファイルシステム:debian-buster-armhf_aiotg3_20221118.tar.gz(fixupにて独自変更を加えています)

------------------------------------------------------------------------------------
■質問
------------------------------------------------------------------------------------
作成したプロセスを起動する際の時刻を常に同じ時間に統一したいため、プロセス起動時に「1970-01-01 00:00」をHWクロックとシステムクロックに反映させたいです。
以下の通り、コマンドを投入しておりますが、システムクロックを「1970-01-01 00:00:00」に設定することができません。
「1970-01-01 00:00」をシステム時刻へ反映する方法をご教授ください。

そもそもHWクロック、システムクロックも設定可能な時間に何かしらの制約があるのであればそれも教えてください。

------------------------------------------------------------------------------------
■ログ
------------------------------------------------------------------------------------
①hwclockに"1970-01-01 00:00:00"を設定→NG
root@armadillo:~# hwclock --set --date "1970-01-01 00:00:00" --localtime
root@armadillo:~# hwclock
1970-01-01 00:00:07.368911+09:00 →★この時点で1970-01-01 00:00 をHWに設定はできている
root@armadillo:~# hwclock --hctosys →★HWクロックをシステムクロックに反映するしようとすると失敗する
hwclock: settimeofday() failed: Invalid argument

②hwclockに"1970-01-03 09:00:00"を設定→OK
root@armadillo:~# hwclock --set --date "1970-01-03 09:00:00" →★1970/1/3 9時なら設定できた
root@armadillo:~# hwclock --utc --hctosys
root@armadillo:~# date
Sat Jan 3 09:00:10 JST 1970

③システムクロックで1970/01/01 00:00を設定→NG
root@armadillo:~# date -s "1970/01/01 00:00"
date: cannot set date: Invalid argument

閾値を探ると1970/01/01 23:50なら成功した。
root@armadillo:~# date -s "1970/01/01 23:00"
date: cannot set date: Invalid argument
Thu Jan 1 23:00:00 JST 1970

root@armadillo:~# date -s "1970/01/01 23:30"
date: cannot set date: Invalid argument
Thu Jan 1 23:30:00 JST 1970

root@armadillo:~# date -s "1970/01/01 23:40"
date: cannot set date: Invalid argument
Thu Jan 1 23:40:00 JST 1970

root@armadillo:~# date -s "1970/01/01 23:49"
date: cannot set date: Invalid argument
Thu Jan 1 23:49:00 JST 1970

root@armadillo:~# date -s "1970/01/01 23:50"
Thu Jan 1 23:50:00 JST 1970
root@armadillo:~# hwclock --utc --systohc
root@armadillo:~# hwclock
1970-01-01 23:50:47.007846+09:00

コメント

at_dominique.m…

2024年8月1日 14時19分

masaya_yoshitomiさん

> 作成したプロセスを起動する際の時刻を常に同じ時間に統一したいため、プロセス起動時に「1970-01-01 00:00」をHWクロックとシステムクロックに反映させたいです。
> 以下の通り、コマンドを投入しておりますが、システムクロックを「1970-01-01 00:00:00」に設定することができません。
> 「1970-01-01 00:00」をシステム時刻へ反映する方法をご教授ください。
>
> そもそもHWクロック、システムクロックも設定可能な時間に何かしらの制約があるのであればそれも教えてください。

使用している HW クロックによってそちらにも制限ありますが(例えば Armadillo IoT G4 で使用している rv8803 では 2000年前の年を設定できません)、そこは hwclock の制限だけで今回は問題ありません。

本件のエラーはおそらく Linux での uptime による制限です:
Linux v4.3 以降( https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/comm… ) に Linux の起動時間が 1970-01-01 00:00:00 前になるような時刻を設定できなくなりました。

なので、以下の例では uptime が3日ぐらいだったと思いますが、どうでしょうか?
起動したばかりの Armadillo IoT G3 では時刻を 1970-01-01 09:05:00 などを設定できました。

基本的にはインタネットがあれば ntp を使っていただいた方が正確な時間になると思いますが、どうしても時間を設定したい場合は 1970 から離れた時刻にしてください。

よろしくお願いします

横から口を挟んで済みません。情報提供。
ArmadilloではないUNIXでの経験ですが、
「1970-1-1 00:00:00が1970-1-1 00:00:00 JSTと認識され、つまりそれは1969-12-31 15:00 GMTなので不正値」
というものでした。