Linux 下如何使用看门狗
这样,在应用程序里只需打开这个设备使用即可:
#include <fcntl.h>
void main(void)
{
int fdWD;
char chrTmp;
fdWD = open("/dev/watchdog", O_RDWR); //设备一打开,看门狗也就出洞了。
for(;;)
{
write(fdWD, &chrTmp, 1); //任一指针就行了,因为内部并未使用;最后的数据非零就行了,因为内部只是判断是否零 来置狗为初值。
sleep(10); //在我的板上, 16秒后狗才出动,所以10喂一次也就行了。
}
}
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>
Linux 下如何使用看门狗的更多相关文章
- linux内核中断之看门狗
一:内核中断 linux内核中的看门狗中断跟之前的裸板的中断差不多,在编写驱动之前,需要线把内核自带的watch dog模块裁剪掉,要不然会出现错误:在Device Drivers /Watchdog ...
- Linux编程之《看门狗进程》
Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...
- Linux 下安装服务器安全狗
1.网上下载服务器安全狗的软件包 32位和64位 wget http://www.safedog.cn/server_safedog_linux.html/safedog_linux32.tar ...
- 基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读
本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗“,如 ...
- [看门狗]基于Linux的嵌入式系统全程喂狗策略
转自:http://blog.csdn.net/erickhuang1989/article/details/8721548 在嵌入式系统中,为了使系统在异常情况下能自动恢复,一般都会引入看门狗电路. ...
- Linux 软件看门狗 watchdog 喂狗
Linux 自带了一个 watchdog 的实现,用于监视系统的运行,包括一个内核 watchdog module 和一个用户空间的 watchdog程序.内核 watchdog 模块通过 /dev/ ...
- 一个软件实现的Linux看门狗—soft_wdt
soft_wdt(下面简称本软件)是一个软件实现的Linux看门狗. 本软件是一款开源.免费软件. 下载地址: https://github.com/sunmingbao/soft-wdt/archi ...
- shell 之 用linux定时任务crontab和watchdog.sh脚本做软件看门狗
1.简介 看门狗的作用是定期检测服务正常运行,如果发现服务不在了,会重新拉起服务:linux中可以利用系统的定时任务功能crontab定期的去执行watchdog.sh脚本,而watchdog.sh脚 ...
- linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...
随机推荐
- A Tour of Go Pointers
Go has pointers, but no pointer arithmetic. Struct fields can be accessed through a struct pointer. ...
- sql server smo
在SQL Server2005以前的版本中,SQL分布式管理对象(SQL-DMO)为我们提供了非常有效的方法来通过编程的方式管理SQL Server.SQL-DMO支持基于COM的接口,开发人员可以通 ...
- windows进程间通信 .
摘 要: 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求.编写多进程/多线程程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的.Microso ...
- hibernate三级缓存介绍
hibernate缓存机制:分为三种:1.一级缓存(session级别缓存,同一session中不会重复发出sql,默认会实现)2.二级缓存(跨session的缓存,不同session会从同一缓存中取 ...
- java.util.Map按照key值合并的value的Collection 集合中。
用java实现把多个map的内容合并的一个resultMap中 代码大致如下 /** * @author Shalf */ public class MapUtil { /** * 把partMa ...
- validatebox实现多重规则验证
作为Easyui的校验插件没有实现多重校验能力是一种缺憾.比如说,既要限制格式为email,同时要求最长长度为20,我们就要扩展一种规则,而对长度的要求很容易变化,如果变成要求30,我们又得扩张一种规 ...
- dubbo资料
http://blog.csdn.net/morning99/article/details/40426781http://blog.csdn.net/ruishenh/article/details ...
- c++匿名类—指针
1 摘自网上 2代码实例 #include <iostream> #include <list> #include <iterator> #include < ...
- angularjs填写表单
https://scotch.io/tutorials/handling-checkboxes-and-radio-buttons-in-angular-forms <!DOCTYPE html ...
- 在某些情况下明明添加了引用,为何VS还报错"XXX"不存在类型或命名空间(是否缺少程序集引用)
程序主结构:两个程序集DLL,一个OpticalAlarm(主程序),一个OpticalAlarm.Common 问题描述:搭建程序框架时,使用了log4net进行日志处理,在OpticalAlarm ...