You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.2 KiB
52 lines
1.2 KiB
/* watchdog - start a watchdog timer with configurable kick frequencies
|
|
*
|
|
* Copyright 2019 Chris Sarra <chrissarra@google.com>
|
|
*
|
|
* See kernel.org/doc/Documentation/watchdog/watchdog-api.txt
|
|
|
|
USE_WATCHDOG(NEWTOY(watchdog, "<1>1Ft#=4<1T#=60<1", TOYFLAG_NEEDROOT|TOYFLAG_BIN))
|
|
|
|
config WATCHDOG
|
|
bool "watchdog"
|
|
default y
|
|
help
|
|
usage: watchdog [-F] [-t UPDATE] [-T DEADLINE] DEV
|
|
|
|
Start the watchdog timer at DEV with optional timeout parameters.
|
|
|
|
-F run in the foreground (do not daemonize)
|
|
-t poke watchdog every UPDATE seconds (default 4)
|
|
-T reboot if not poked for DEADLINE seconds (default 60)
|
|
*/
|
|
|
|
#define FOR_watchdog
|
|
#include "toys.h"
|
|
#include "linux/watchdog.h"
|
|
|
|
GLOBALS(
|
|
long T, t;
|
|
|
|
int fd;
|
|
)
|
|
|
|
static void safe_shutdown(int ignored)
|
|
{
|
|
write(TT.fd, "V", 1);
|
|
close(TT.fd);
|
|
error_exit("safely exited watchdog.");
|
|
}
|
|
|
|
void watchdog_main(void)
|
|
{
|
|
if (!FLAG(F)) xvdaemon();
|
|
xsignal(SIGTERM, safe_shutdown);
|
|
xsignal(SIGINT, safe_shutdown);
|
|
xioctl(TT.fd = xopen(*toys.optargs, O_WRONLY), WDIOC_SETTIMEOUT, &TT.T);
|
|
|
|
// Now that we've got the watchdog device open, kick it periodically.
|
|
for (;;) {
|
|
write(TT.fd, "", 1);
|
|
sleep(TT.t);
|
|
}
|
|
}
|