更新情報(2025/4/8)
最新化により最低限の設定で使えるように書き換えました。
ドライバーを含むアプリケーションが暴走していないか確認する為、ウォッチドッグタイマーでそのチェックをします。既定では無効化されてるので、有効化する方法を案内します。
今回記載の内容は、一番簡単な方法です。
他にサービスを使っての方法もあります。
ウォッチドッグタイマーの概要
ウォッチドッグタイマーの概要は
いつも、実行優先度の一番低いアイドルループが、一定間隔でウォッチドッグタイマーのカウントをリセットしています。
しかし、実行優先度の高いアプリケーションがずーーーーーっとループし続けると、実行優先度の低いアイドルループが動かず、ウォッチドッグタイマーのカウントがリセットされません。
ついにウォッチドッグタイマーがタイムアウトしてCPUがリセットされます。
CPUがリセットされることで、サーバが再起動し、正常に稼働し始めます。
ウォッチドッグ(WDT)の有効化
下記の通り設定して、再起動するだけで有効化できます。
$ sudo vi /etc/systemd/system.conf

ももぶろ
viの超簡単な使い方は、ここを見てね
下記内容をファイルに追加します。既に定義されていれば、下記内容に変更してください。
RuntimeWatchdogSec=10
RebootWatchdogSec=2min
設定内容の意味は、RuntimeWatchdogSec=10は、10秒間リセットがないと再起動します。RebootWatchdogSec=2minは、再起動後2分間後にウォッチドッグを起動します。起動にはCPUを使うので、ウォッチドッグタイマーの起動を遅らせています。
ここでreboot
変更を反映する為ここで再起動します。
$ sudo reboot
再起動後、状況を下記のコマンドで確認します。
$ dmesg | grep watchdog
[ 1.774211] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
[ 3.730867] systemd[1]: Using hardware watchdog 'Broadcom BCM2835 Watchdog timer', version 0, device /dev/watchdog0
再起動を確認
この操作で、Kernelがパニックになります。
$ sudo su
# echo c > /proc/sysrq-trigger

ももぶろ
この後Raspberry Piが再起動すれば大丈夫です。お疲れ様です。