AHA! Po prostudování linux/watchdog.h
jádra a drivers/watchdog/softdog.c
, byl jsem schopen určit schopnosti softdogu ioctl()
rozhraní. Při pohledu na možnosti, které oznamuje v struct watchdog_info
:
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
Má podporují magické uzavření, které (zdá se) přepíše CONFIG_WATCHDOG_NOWAYOUT
. Takže při normálním ukončení musím napsat jeden znak 'V' do /dev/watchdog
pak zavřete jej a časovač přestane počítat.
Jednoduchý ioctl()
na deskriptor souboru na /dev/watchdog
dotazem WDIOC_GETSUPPORT
umožňuje určit, zda je tento příznak nastaven. Pseudokód:
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.
}
Při práci s hardwarovými hlídacími psy možná budete chtít otevřít pomocí O_NONBLOCK
takže ioctl()
ne open()
blokuje (proto detekuje obsazenou kartu).
Pokud WDIOF_MAGICCLOSE
není podporováno, je třeba pouze předpokládat, že soft watchdog je nakonfigurován s NOWAYOUT. Nezapomeňte, stačí otevření zařízení úspěšně zahájí odpočítávání. Pokud vše, co děláte, je zjišťovat, zda podporuje magické zavírání, a to ano, pak magické zavírání . Jinak se určitě vypořádejte s tím, že teď máte běžícího hlídacího psa.
Bohužel neexistuje žádný skutečný způsob, jak to vědět jistě, aniž bych to skutečně spustil, alespoň ne ten, který bych mohl najít.
hlídací pes chrání před pevným uzamčením systému, ať už kvůli selhání softwaru nebo selhání hardwaru.
co potřebujete, je démon pro monitorování démonů (dmd). zaškrtněte 'monit'