私たちは、ウォッチドッグをオンにする/dev/watchdog
と1分以内にアクティブになり、文字を送信してリセットされることを知っています。説明はここ。
BBBで使用されるプロセッサAM335x内部監視はデフォルトで有効になっています。ただし、U-BootまたはUbuntuが起動すると、この監視機能は無効になります。オペレーティングシステムが起動したら、使用する準備が整います/dev/watchdog
。
U-Bootやカーネルが起動に失敗しても、ウォッチドッグが機能していることを確認したいと思います。それではどうすればいいですか?
- カーネルとU-Bootは監視タイマーを無効にしてはいけません。
- ウォッチドッグのデフォルトのタイムアウトは、オペレーティングシステムが完全に起動できるように、U-Bootがカーネルを起動する前に1分以上でなければなりません。
U-BootコードやLinuxカーネルコードの一部を変更することは許可されていることに言及したいと思います。しかし、外部監視はオプションではありません。
答え1
調査の結果、Linuxカーネルは起動時にウォッチドッグを無効にしませんが、実際にはタイマーを使用してウォッチドッグをリセットすることを発見しました。カーネルエラーやパニックが発生しても、監視タイマーのオーバーフローによってシステムが再起動しないように監視をリセットします。
/proc/sys/kernel/panic
このファイルは、カーネル変数Patrick_timeoutへの読み取り/書き込みアクセスを提供します。この値が 0 の場合、カーネルはパニック状態で繰り返されます。 0以外の場合、カーネルはこの時間(秒)後に自動的に再起動する必要があることを意味します。
当然、ゼロ以外の値をファイルに渡す必要があります。 ~によるとこの回答、値を渡すには、カーネルパニック後に再起動する前に3秒間待つようにパラメータを変更して追加する必要が/proc/sys/kernel/panic
あります。/etc/sysctl.conf
kernel.panic = 3
しかし、これは私の問題を解決しませんでした。私が見つけた他のパニック関連の問題を調査していますman proc
。
/proc/sys/kernel/panic_on_oops (Linux 2.5.68以降)
このファイルは、エラーまたはBUGが発生したときのカーネルの動作を制御します。ファイルに0が含まれている場合、システムは続行しようとします。 1が含まれている場合、システムは数秒間遅延した後(klogdにoops出力を書き込む時間を提供するため)パニック状態になります。 /proc/sys/kernel/panic ファイルも 0 の場合、マシンは再起動します。
私の問題はパニックではなくカーネルです。こんな!したがってkernel.panic_on_oops = 1
、を追加すると/etc/sysctl.conf
フラグが/proc/sys/kernel/panic_on_oops
1に変わります。カーネルが停止するたびに3秒後に再起動されます。