From e8ff755cba9e249d0e43212acbc0c3bf38af1622 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 21 Oct 2020 01:17:35 -0500 Subject: Promote watchdog. --- toys/other/watchdog.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++ toys/pending/watchdog.c | 50 ------------------------------------------------- 2 files changed, 50 insertions(+), 50 deletions(-) create mode 100644 toys/other/watchdog.c delete mode 100644 toys/pending/watchdog.c diff --git a/toys/other/watchdog.c b/toys/other/watchdog.c new file mode 100644 index 00000000..7a49c0b0 --- /dev/null +++ b/toys/other/watchdog.c @@ -0,0 +1,50 @@ +/* watchdog - start a watchdog timer with configurable kick frequencies + * + * Copyright 2019 Chris Sarra + * + * 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 + depends on TOYBOX_FORK + help + usage: watchdog [-F] [-t SW_TIMER_S] [-T HW_TIMER_S] DEV + + Start the watchdog timer at DEV with optional timeout parameters. + + -F run in the foreground (do not daemonize) + -t software timer (in seconds) + -T hardware timer (in seconds) +*/ +#define FOR_watchdog +#include "toys.h" +#include "linux/watchdog.h" + +GLOBALS( + long T, t; + + int fd; +) + +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) && daemon(1, 1)) perror_exit("failed to daemonize"); + 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); + } +} diff --git a/toys/pending/watchdog.c b/toys/pending/watchdog.c deleted file mode 100644 index 86444100..00000000 --- a/toys/pending/watchdog.c +++ /dev/null @@ -1,50 +0,0 @@ -/* watchdog - start a watchdog timer with configurable kick frequencies - * - * Copyright 2019 Chris Sarra - * - * 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 n - depends on TOYBOX_FORK - help - usage: watchdog [-F] [-t SW_TIMER_S] [-T HW_TIMER_S] DEV - - Start the watchdog timer at DEV with optional timeout parameters. - - -F run in the foreground (do not daemonize) - -t software timer (in seconds) - -T hardware timer (in seconds) -*/ -#define FOR_watchdog -#include "toys.h" -#include "linux/watchdog.h" - -GLOBALS( - long T, t; - - int fd; -) - -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) && daemon(1, 1)) perror_exit("failed to daemonize"); - 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, "\0", 1); - sleep(TT.t); - } -} -- cgit v1.2.3