AHA! Dopo aver scavato nel linux/watchdog.h
del kernel e drivers/watchdog/softdog.c
, sono stato in grado di determinare le capacità del softdog ioctl()
interfaccia. Guardando le capacità che annuncia in struct watchdog_info
:
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
Sì supporta una chiusura magica che (sembra) sovrascrivere CONFIG_WATCHDOG_NOWAYOUT
. Quindi, quando si termina normalmente, devo scrivere un singolo carattere 'V' in /dev/watchdog
allora chiudilo e il timer smetterà di contare.
Un semplice ioctl()
su un descrittore di file a /dev/watchdog
chiedendo WDIOC_GETSUPPORT
consente di determinare se questo flag è impostato. Pseudo codice:
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.
}
Quando lavori con watchdog hardware, potresti voler aprire con O_NONBLOCK
quindi ioctl()
non open()
blocchi (rilevando quindi una carta occupata).
Se WDIOF_MAGICCLOSE
non è supportato, si dovrebbe semplicemente supporre che il soft watchdog sia configurato con NOWAYOUT. Ricorda, solo apertura il dispositivo avvia correttamente il conto alla rovescia. Se tutto ciò che stai facendo è sondare per vedere se supporta la chiusura magica e lo fa, allora la chiusura magica . Altrimenti, assicurati di affrontare il fatto che ora hai un cane da guardia in esecuzione.
Sfortunatamente, non c'è un vero modo per saperlo con certezza senza avviarlo effettivamente, almeno non quello che sono riuscito a trovare.
un watchdog protegge dal blocco hardware del sistema, a causa di un arresto anomalo del software o di un guasto hardware.
ciò di cui hai bisogno è un demone che monitora il demone (dmd). controlla 'monito'