あはは!カーネルの linux/watchdog.h
を掘り下げた後 そして drivers/watchdog/softdog.c
、ソフトドッグ ioctl()
の機能を特定できました インターフェース。 struct watchdog_info
で発表された機能を見ると、 :
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
する CONFIG_WATCHDOG_NOWAYOUT
をオーバーライドする (と思われる) 魔法の終了をサポートします .なので、正常終了時は /dev/watchdog
に 'V' という文字を 1 文字書く必要があります その後 閉じると、タイマーのカウントが停止します。
シンプルな ioctl()
/dev/watchdog
へのファイル記述子 WDIOC_GETSUPPORT
を尋ねる このフラグが設定されているかどうかを判断できます。擬似コード:
int fd;
struct watchdog_info info;
fd = open("/dev/watchdog", O_WRONLY);
if (fd == -1) {
perror("open");
// abort, timer did not start - no additional concerns
}
if (ioctl(fd, WDIOC_GETSUPPORT, &info)) {
perror("ioctl");
// abort, but you probably started the timer! See below.
}
if (WDIOF_MAGICCLOSE & info.options) {
printf("Watchdog supports magic close char\n");
// You have started the timer here! Handle that appropriately.
}
ハードウェア ウォッチドッグを使用する場合は、O_NONBLOCK
で開くことをお勧めします。 だから ioctl()
open()
ではない ブロックします (したがって、使用中のカードを検出します)。
WDIOF_MAGICCLOSE
の場合 はサポートされていないため、ソフト ウォッチドッグが NOWAYOUT で構成されていると想定する必要があります。覚えておいてください、開くだけです デバイスはカウントダウンを正常に開始します。マジック クローズをサポートしているかどうかを調べるだけなら、マジック クローズ .それ以外の場合は、実行中のウォッチドッグがあるという事実に対処してください。
残念ながら、実際に起動しない限り確実に知る方法はありません。少なくとも私は見つけられませんでした.
ウォッチドッグは、ソフトウェアのクラッシュやハードウェアの障害によるシステムのハードロックを防ぎます。
必要なのは、デーモン監視デーモン (dmd) です。 「モニター」をチェックしてください