文档章节

Linux 软件看门狗 watchdog

 我爱咸蛋黄
发布于 2014/12/16 17:49
字数 419
阅读 420
收藏 20

Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog 程序。内核 watchdog 模块通过 /dev/watchdog 这个字符设备与用户空间通信。用户空间程序一旦打开 /dev/watchdog 设备(俗称“开门放狗”),就会导致在内核中启动一个1分钟的定时器(系统默认时间),此后,用户空间程序需要保证在1分钟之内向这个设备写入数据(俗称“定期喂狗”),每次写操作会导致重新设定定时器。如果用户空间程序在1分钟之内没有写操作,定时器到期会导致一次系统 reboot 操作(“狗咬人了”呵呵)。通过这种机制,我们可以保证系统核心进程大部分时间都处于运行状态,即使特定情形下进程崩溃,因无法正常定时“喂狗”,Linux系统在看门狗作用下重新启动(reboot),核心进程又运行起来了。多用于嵌入式系统。

打开 /dev/watchdog 设备(“开门放狗”):

int fd_watchdog = open("/dev/watchdog", O_WRONLY);
if(fd_watchdog == -1) {
 int err = errno;
 printf("\n!!! FAILED to open /dev/watchdog, errno: %d, %s\n", err, strerror(err));
 syslog(LOG_WARNING, "FAILED to open /dev/watchdog, errno: %d, %s", err, strerror(err));
}

每隔一段时间向 /dev/watchdog 设备写入数据(“定期喂狗”):

//feed the watchdog
if(fd_watchdog >= 0) {
 static unsigned char food = 0;
 ssize_t eaten = write(fd_watchdog, &food, 1);
 if(eaten != 1) {
  puts("\n!!! FAILED feeding watchdog");
  syslog(LOG_WARNING, "FAILED feeding watchdog");
 }
}

关闭 /dev/watchdog 设备,通常不需要这个步骤:


 close(fd_watchdog);

所需头文件:

#include <unistd.h>
#include <sys/stat.h>
#include <syslog.h>
#include <errno.h>

 

本文转载自:http://blog.csdn.net/liigo/article/details/9227205

粉丝 10
博文 135
码字总数 7273
作品 0
东莞
私信 提问
嵌入式系统watchdog详解

嵌入式系统的工作常会受到外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以需要对嵌入式系统运行状态进行实...

songkai320
2017/12/25
0
0
迅为-IMX6开发板-QtE-watchdog看门狗例程

本节介绍的是在 linux 系统环境下看门狗测试例程。WatchDog 是为了能够防止程序跑飞 而使用的一种东西,用户在一般的程序也许不需要,但在特殊的情况下可能会需要这种机制。 在此我们将介绍看...

书白
09/05
19
0
Android系统层Watchdog机制源码分析

一:为什么需要看门狗? Watchdog,初次见到这个词语是在大学的单片机书上, 谈到了看门狗定时器. 在很早以前那个单片机刚发展的时候, 单片机容易受到外界工作影响, 导致自己的程序跑飞, 因此有...

Anderson大码渣
2017/12/21
0
0
STM32F767IGT6上电多次重启问题查找与解决

1.重启现象描述 STM32F767IGT6在烧写SylixOS成功后,重新上电会出现多次重启的现象,初次定位可能是看门狗或者是系统运行过程中内存溢出导致的重启。 2.重启问题查找 为了解决多次重启问题,...

逍遥蓝云
2017/07/19
0
0
STM32开发 -- 看门狗详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29350001/article/details/87788043 看门狗部分,之前讲软件复位的时候提到,接下来详细看一下。 一、独立...

聚优致成
02/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mysql-connector-java升级到8.0后保存时间到数据库出现了时差

在一个新项目中用到了新版的mysql jdbc 驱动 <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId>     <version>8.0.18</version> ......

ValSong
49分钟前
5
0
Spring Boot 如何部署到 Linux 中的服务

打包完成后的 Spring Boot 程序如何部署到 Linux 上的服务? 你可以参考官方的有关部署 Spring Boot 为 Linux 服务的文档。 文档链接如下: https://docs.ossez.com/spring-boot-docs/docs/r...

honeymoose
51分钟前
5
0
Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
今天
6
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
今天
4
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部