8. 看门狗#

看门狗(Watchdog)是一种用于监控系统健康状态的机制,它的主要功能是确保系统在发生故障时能够自动恢复或重启,从而提高系统的可靠性和稳定性。

8.1. 工作原理#

  • 定期“喂狗”:看门狗通过一个定时器来监控系统的运行,系统需要定期发送一个“喂狗”的信号,表明系统仍在正常运行。如果系统未能按时发送这个信号(可能由于系统崩溃或严重的错误),看门狗会认为系统出现了问题。

  • 超时处理:如果看门狗超时没有接收到“喂狗”信号,它会采取预定义的措施,例如重启系统或执行其他恢复操作,这种机制可以确保系统在遇到不可恢复的错误时自动恢复运行。

8.2. 使用#

8.2.1. 喂狗测试#

LubanCat-RK3588系列板卡默认已经开启了看门狗,可以直接使用。

应用操作通过/dev/watchdog节点来控制watchdog,示例如下:

1# 写入除大写V以外的任意字符,用户喂狗
2echo 1 > /dev/watchdog
3
4# 写入大写V字符,系统自行喂狗
5echo V > /dev/watchdog

默认系统会自动喂狗,如果向/dev/watchdog写入除大写V以外的任意字符则需要用户自行喂狗, 如果在44秒内没有继续写入字符进行喂狗,系统将会重启。

8.2.2. 使用shell脚本喂狗#

以下示例使用shell脚本10s喂一次狗。

1#!/bin/bash
2
3while true
4do
5    echo 1 > /dev/watchdog
6    sleep 10
7done

8.2.3. 使用C程序喂狗#

以下使用C程序10s喂一次狗。

 1#include <stdio.h>
 2#include <stdlib.h>
 3#include <fcntl.h>
 4#include <unistd.h>
 5#include <errno.h>
 6
 7int main(void)
 8{
 9    int fd = open("/dev/watchdog", O_WRONLY);
10    int ret = 0;
11    if (fd == -1) {
12        perror("watchdog");
13        exit(EXIT_FAILURE);
14    }
15    while (1) {
16        ret = write(fd, "\0", 1);  // 通过write来喂狗
17        if (ret != 1) {
18            ret = -1;
19            break;
20        }
21        sleep(10);
22    }
23    close(fd);
24    return ret;
25}