AHA ! Après avoir fouillé dans le linux/watchdog.h
du noyau et drivers/watchdog/softdog.c
, j'ai pu déterminer les capacités du softdog ioctl()
interface. En regardant les capacités qu'il annonce dans struct watchdog_info
:
static struct watchdog_info ident = {
.options = WDIOF_SETTIMEOUT |
WDIOF_KEEPALIVEPING |
WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "Software Watchdog",
};
Il fait prend en charge une fermeture magique qui (semble) remplacer CONFIG_WATCHDOG_NOWAYOUT
. Donc, lors de la terminaison normale, je dois écrire un seul caractère 'V' à /dev/watchdog
alors fermez-le et le chronomètre arrêtera de compter.
Un simple ioctl()
sur un descripteur de fichier à /dev/watchdog
demander WDIOC_GETSUPPORT
permet de déterminer si ce drapeau est activé. Pseudo-code :
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.
}
Lorsque vous travaillez avec des chiens de garde matériels, vous voudrez peut-être ouvrir avec O_NONBLOCK
donc ioctl()
pas open()
blocs (donc détection d'une carte occupée).
Si WDIOF_MAGICCLOSE
n'est pas pris en charge, il faut simplement supposer que le chien de garde logiciel est configuré avec NOWAYOUT. Rappelez-vous, il suffit d'ouvrir l'appareil démarre avec succès le compte à rebours. Si tout ce que vous faites est de sonder pour voir s'il prend en charge la fermeture magique et c'est le cas, alors la fermeture magique . Sinon, assurez-vous de gérer le fait que vous avez maintenant un chien de garde en cours d'exécution.
Malheureusement, il n'y a pas vraiment de moyen de savoir avec certitude sans le démarrer, du moins pas que j'ai pu trouver.
un chien de garde protège contre le verrouillage dur du système, soit en raison d'un plantage logiciel, soit d'une panne matérielle.
ce dont vous avez besoin est un démon de surveillance démon (dmd). vérifier 'surveiller'