Armadilloフォーラム

カーネルのソフトウェア/ハードウェアウォッチドッグの動作について

masaya_yoshitomi

2024年5月16日 11時27分

-----------------------------------------------------------------------------------
■背景
------------------------------------------------------------------------------------
以下フォーラムについての影響有無を確認したい
https://armadillo.atmark-techno.com/forum/armadillo/19509

------------------------------------------------------------------------------------
■質問内容
------------------------------------------------------------------------------------

【動作環境】
 ・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にて独自変更を加えています)

■質問①
カーネルコンフィギュレーションでない通常のターミナルからソフト/ハードウェアウォッチドッグの有効/無効を確認する方法はあるでしょうか?

■質問②
以下のようにウォッチドッグのデバイスへアクセスしなければウォッチドッグは動くことはないのでしょうか。
ウォッチドッグの有効/無効を意識していませんが、ターミナルから以下のように1度でもアクセスをすることで
定期的に/dev/watchdogへアクセスを継続しないとシステム的にリセットされます。
これは、カーネルコンフィグレーションでソフト/ハードウェアウォッチドッグ機能が【動作環境】ではデフォルト有効化されているということでしょうか

 root@armadillo:~# echo > /dev/watchdog
 watchdog: watchdog0: watchdog did not stop!

■質問③
独自で作成したアプリケーションをsystemdにサービス登録したうえで、systemdのウォッチドッグ機能を使用してアプリケーションを監視していますが、
カーネルが提供するソフトウェア/ハードウェアウォッチドッグの有効/無効に影響することなくsystemdによるウォッチドッグが動作すると思ってよいでしょうか?

【参考にしたサイト】
・ハードウェアウォッチドッグについて
 https://armadillo.atmark-techno.com/howto/watchdog
・ソフトウェアウォッチドッグについて
 https://armadillo.atmark-techno.com/blog/53/1319

■質問④
カーネルが提供するSW/HWウォッチドックを有効化にしない限り、以下フォーラムに記載の事象は発生しないと考えて
宜しいでしょうか?
https://armadillo.atmark-techno.com/forum/armadillo/19509

コメント

at_ohsawa

2024年5月20日 13時58分

> カーネルコンフィギュレーションでない通常のターミナルからソフト/ハードウェアウォッチドッグの有効/無効を確認する方法はあるでしょうか?

はい。次のFAQで紹介しています。
FAQ:Armadilloで動作中のLinuxカーネルのコンフィギュレーションを確認するには
https://armadillo.atmark-techno.com/faq/check-kernel-config

ちなみにG3はデフォルトで有効です。

# zcat /proc/config.gz | grep WDT
# zcat /proc/config.gz |grep WATCHDOG=y

この辺の情報でSoCのWDTコアのドライバとWDTインターフェース自体の有効化が確認できます。

> ■質問②
> 以下のようにウォッチドッグのデバイスへアクセスしなければウォッチドッグは動くことはないのでしょうか。

そもそも、ウォッチドッグは全製品で起動時から有効です。kernelが
常にウォッチドッグをキックすることで、linux kernel自体が故障や致命的な
バグでフリーズして、ユーザーランドのプロセスではどうにもならない状態
を回避しています。

これはユーザーの操作とは関係ない挙動です。

加えて、/dev/watchdogにユーザーランドからアクセスすると、その制御を
オーバーライドすることができるので
”kernelが停止するほど致命的ではなくても”/dev/watchdogにアクセスが
無い場合でもリセットする。という動作になります。

かなりの方が、デフォルトの(/dev/watchdogを操作しない状態での)WDTに
よるリセットが起きた場合にWDTを目の敵にしがちです。

しかし、もし無効にしてしまうとハードウェアが稼働しない程度に何も
できない程度に致命的な状態(割り込み線が常時Hiになるようなショートを
起こしている、kernelの致命的な異常が発生した場合)に、初期状態へ
脱出するためのセーフネットを喪失し、フリーズしたままになります。

> 独自で作成したアプリケーションをsystemdにサービス登録したうえで、systemdのウォッチドッグ機能を使用してアプリケーションを監視していますが、
> カーネルが提供するソフトウェア/ハードウェアウォッチドッグの有効/無効に影響することなくsystemdによるウォッチドッグが動作すると思ってよいでしょうか?

systemdのウォッチドッグ機能は上述のものと無関係です。
単にsystemdが起こしているアプリケーションの状態を監視するために、
systemd内に実装されている機能の名前です。

> ■質問④

いいえ。下の通知についてですが、データ破損によってkernelが実行継続できず
フリーズした場合の救済機構としてWDTによるリセットが存在しています。
そのため、WDTを止める等は対応として意味がありません。

https://armadillo.atmark-techno.com/news/software-errata/x1/20240328

もし、WDTが無効状態になっているとフリーズしたまま電源を物理遮断するまで
稼働できなくなります。

既に稼働させている機体で上の状況が発生している場合は、WDTを操作するのではなく
ニュース内で紹介しているバージョンにbootloaderをアップデートしてください。

また、新規書き込む場合でも古いバージョンのbootloderを書き込むインストールディスクを
使わずに最新版のインストールディスクをベースに書き込みを行ってください。