Yapabilirsin ve oldukça kolay. RPi, standart Linux watchdog API'sini uygulayan bir Linux modülüne sahiptir. Bunun belgelerini burada bulabilirsiniz .
Şimdi, bunu okursanız, adı verilen özel bir cihaz dosyası olduğunu bilirsiniz /dev/watchdog
ve kullanmak watchdog
için bu dosyayı açmanız ve bazı veriler yazmanız gerekir (bir bayt, 'V' dışında bir şey yazmak en iyisidir. Daha sonra açıklamak için m). Bu dosyaya yeterince uzun bir süre yazmayacaksanız, watchdog
yeniden başlatmayı tetikler. Burada örnek bir program bulabilirsiniz (çok basit) .
Normal bir durumda, kapatmak eğer Not /dev/watchdog
, watchdog
engelli olabilir. RPi sürücüsü tarafından uygulanmış gibi görünen 'Magic Close özelliği' adı verilen özel bir mod var, ancak AFAIK varsayılan çekirdek yapılandırmasında (CONFIG_WATCHDOG_NOWAYOUT seçeneği) etkin değil. Bu durumda, /dev/watchdog
uygulamadan çıkmadan hemen önce 'V' yazmazsanız, kapatsanız bile yeniden başlatma tetiklenir .
Gerçekten devre dışı olup olmadığını test etmelisiniz (test etmek için şu anda burada bir RPi'm yok), ancak değilse, sizin için iyi değil. Uygulamanız çökerse, watchdog cihaz dosyası kapatılacak ve yeniden başlatma tetiklenmeyecektir ve bu yüzden onu istemektedir. Bu durumda, çekirdek yapılandırmasını değiştirebilir ve yeniden oluşturabilir veya ana uygulamanızın çalışıp çalışmadığını izleyecek özelleştirilmiş bir uygulama yazabilirsiniz (örneğin, bazı IPC yöntemlerini kullanarak).
Daha fazlasını yapmanıza izin veren ioctl API'sı da var watchdog
. Örneğin, WDIOC_SETTIMEOUT (RPI sürücüsü tarafından destekleniyor gibi görünüyor) ile farklı bir zaman aşımı - IOCTL ayarlayabilirsiniz veya WDIOC_GETTIMEOUT (destekleniyor gibi görünüyor) ile IOCTL zaman aşımı alabilirsiniz. Varsayılan zaman aşımını değiştirmek için (10 saniye) kullanmak isteyebilirsiniz. Bununla birlikte, 16 saniyede katı sınırlama vardır. İşte bir örnek:
int timeout = 15;
int fd = open("/dev/watchdog", O_WRONLY);
ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
İsterseniz bir karakter yazmak yerine IOCTL'yi WDIOC_KEEPALIVE ile de kullanabilirsiniz. Her iki yöntem de geçerlidir.