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 ...
随机推荐
- [置顶] mysql中的set和enum类型的用法和区别
mysql中的enum和set其实都是string类型的而且只能在指定的集合里取值, 不同的是set可以取多个值,enum只能取一个值. CREATE TABLE `20121101_t` ( ...
- 立体视觉-opencv中立体匹配相关代码
三种匹配算法比较 BM算法: 该算法代码: view plaincopy to clipboardprint? CvStereoBMState *BMState = cvCreateStereoBMS ...
- OutLook中发送用户密码加密的小技巧
1 在左上栏目里面选择 New E-mail选项卡,点击进入发送新邮件页面. 2 在第一栏选择Options选项,点击打开 3 看到有一个红色按钮Perssion按钮,打开 4 ...
- Matlab 如何绘制复杂曲线的包络线
Matlab 如何绘制复杂曲线的包络线 http://jingyan.baidu.com/article/aa6a2c14d36c710d4c19c4a8.html 如果一条曲线(比如声音波形)波动很 ...
- spring的有状态BEAN和无状态BEAN
有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一 ...
- unity3d 获取相机视口四个角的坐标
功能:如标题所示,主要考虑用来做3d Plane的自适应屏幕 /// <summary> /// 获取指定距离下相机视口四个角的坐标 /// </summary> /// &l ...
- (step6.3.4)hdu 1151(Air Raid——最小路径覆盖)
题意: 一个镇里所有的路都是单向路且不会组成回路. 派一些伞兵去那个镇里,要到达所有的路口,有一些或者没有伞兵可以不去那些路口,只要其他人能完成这个任务.每个在一个路口着陆了的伞兵可以沿着街去 ...
- [React Native] Passing data when changing routes
The way you make HTTP requests in React Native is with the Fetch API. In this video we'll talk about ...
- java与.net平台之间进行RSA加密验证
RSA加密算法虽然不分平台,标准都是一样的,但是各个平台的实现方式都不尽相同,下面来我来说说java与.net平台之间该如何进行RSA加密验证,即java端加密->.net端验证和.net端加密 ...
- 读《编写高质量代码:改善JavaScript程序的188个建议》1
建议3:减少全局变量污染 定义全局变量有3种方式: ❑在任何函数外面直接执行var语句. var f='value'; ❑直接添加一个属性到全局对象上.全局对象是所有全局变量的容器.在Web浏览器中, ...