WATCHDOG(4) | FreeBSD Kernel Interfaces Manual | WATCHDOG(4) |
名称
watchdog — ハードウェアとソフトウェアウォッチドッグ書式
#include < sys/watchdog.h>解説
watchdog 機能は、ハードウェアとソフトウェアウォッチドッグを制御するために使用されます。単一の ioctl(2) 呼び出し、 WDIOCPATPAT に対応するデバイス /dev/fido を通してインタフェースを行います。それは、2 のべき乗のナノ秒として指定されたタイムアウト値を表す単一の引数を取り、ウォッチドッグのアクティブまたはパッシブな制御を選択するフラグが OR されます。呼び出しは 2 のべき乗ナノセカンドの整数として指定されたタイムアウト値を表すただ 1 つの引数を取ります。
WD_ACTIVE は、 watchdog が、例えば、 watchdogd(8) デーモンによって、ユーザランドからタイムアウトになることを避けることを示します。 WD_PASSIVE は、 watchdog がカーネルからタイムアウトになることを避けることを示します。
ioctl(2) 呼び出しは、ちょうど利用可能な watchdog(9) の実装の 1 つが指定されたタイムアウトにタイムアウトを設定することをサポートするなら、成功を返します。これは、少なくとも 1 つウォッチドッグが装備されていることを意味します。呼び出しが失敗するなら、例えば、 watchdog(9) の実装のいずれもタイムアウトの長さをサポートしていないなら、すべてのウォッチドッグは無効にされ、明白に再び有効にされなければなりません。
ウォッチドッグを無効にするためには、 WD_TO_NEVER を渡します。失敗したウォッチドッグの装備を解除するなら、エラーが返されます。ウォッチドッグは、まだ装備されているかもしれません!
戻り値
ioctl は、成功すれば、0 を返し、失敗すれば、0 以外を返します。- [ EOPNOTSUPP]
- カーネルにウォッチドッグが存在していないか、またはウォッチドッグのいずれも、要求されたタイムアウト値サポートしません (0 以外のタイムアウト値)。
- [ EOPNOTSUPP]
- ウォッチドッグ無効にすることができませんでした (0 のタイムアウト値)。
- [ EINVAL]
- 不正なフラグの組み合わせが渡されました。
使用例
#include <paths.h> #include <sys/watchdog.h> #define WDPATH "/dev/" _PATH_WATCHDOG int wdfd = -1; static void wd_init(void) { wdfd = open(WDPATH, O_RDWR); if (wdfd == -1) err(1, WDPATH); } static void wd_reset(u_int timeout) { if (ioctl(wdfd, WDIOCPATPAT, &timeout) == -1) err(1, "WDIOCPATPAT"); } /* in main() */ wd_init(); wd_reset(WD_ACTIVE|WD_TO_8SEC); /* potential freeze point */ wd_reset(WD_TO_NEVER);
ウォッチドッグがフリーズしているコードの部分から潜在的に回復することを有効にします。
options SW_WATCHDOG
利用者のカーネルの設定では、発火 (firing) するとき、KDB に落ちるか、またはパニックするように、カーネルのソフトウェアウォッチドッグを追加します。
歴史
watchdog コードは、 FreeBSD 5.1 ではじめて登場しました。作者
watchdog 機能は、 <phk@FreeBSD.org>によって書かれました。ソフトウェアウォッチドッグコードとこのマニュアルページは、 <smkelly@FreeBSD.org>によって書かれました。 <jeff@FreeBSD.org>によって多少の貢献が行われました。バグ
WD_PASSIVE オプションは、まだ実装されていません。December 21, 2009 | FreeBSD |