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}