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
コメント
saitoh
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 から離れた時刻にしてください。
よろしくお願いします