Linux watchdog 6300esb



基本原理:

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

以上原理为watchdog的基本原理,其它类型的watchdog也是按照这个原理实现的。

实例测试:

比如测试通过的6300esb

设备情况如下:

[[email protected] ~]# lspci

00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]

00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]

00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)

00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)

00:02.0 VGA compatible controller: Cirrus Logic GD 5446

00:03.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20)

00:04.0 Audio device: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) High Definition Audio Controller (rev 01)

00:05.0 Communication controller: Red Hat, Inc Virtio console

00:06.0 RAM memory: Red Hat, Inc Virtio memory balloon

00:07.0 System peripheral: Intel Corporation 6300ESB Watchdog Timer

[[email protected] ~]# dmesg|grep 6300

i6300ESB timer: Intel 6300ESB WatchDog Timer Driver v0.04

i6300ESB timer: initialized (0xffffc90000e8c000). heartbeat=30 sec (nowayout=0)

[[email protected] ~]# lsmod|grep softdog

[[email protected] ~]# lsmod|grep watchdog

[[email protected] ~]# ps -ef|grep watchdog

root         6     2  0 01:59 ?        00:00:00 [watchdog/0]

root      1748  1711  0 02:28 pts/0    00:00:00 grep watchdog

[[email protected] ~]# lsmod|grep 6300

i6300esb                5669  0

close(fd_watchdog);

整体程序如下:

#include <unistd.h>

#include <sys/stat.h>

#include <syslog.h>

#include <errno.h>

#include <sys/types.h>

#include <fcntl.h>

#include <stdlib.h>

#include <stdio.h>

int main(int argc,char** argv)

{

//1、打开 /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));

}

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

if(fd_watchdog >= 0)

{

while(1)

{

sleep(10);

static unsigned char food = 0;

ssize_t earten = write(fd_watchdog,&food,1);

if(earten != 1)

{

puts("\n!!! failed feeding watchdog");

syslog(LOG_WARNING,"failted feeding watchdog");

}

}

}

close(fd_watchdog);

}

[[email protected] watchdog]# gcc watchdog.c -o watchdog

[[email protected] watchdog]# ./watchdog &

[1] 1790

[[email protected] watchdog]#

使系统崩溃:

[[email protected] ~]# echo c > /proc/sysrq-trigger

这时候系统会自动重新启动。

如果通过spice连接的系统,会看到先出现系统崩溃而出现的很多字符提示,一会系统就会重新启动。

时间: 2024-11-05 21:57:01

Linux watchdog 6300esb的相关文章

Linux Watchdog Test Program

/*********************************************************************** * Linux Watchdog Test Program * 说明: * 由于之前的reset一直没有得到解决,所以这个Watchdog功能一直没有处理, * 现在问题解决了,于是需要加入这个测试程序. * * 2016-4-15 深圳 南山平山村 曾剑锋 ***********************************************

Linux的WDT(watchdog)驱动

第一部分: WDT驱动原理WDT在内核中通常都实现为misc驱动.WDT介绍一个Watchdog Timer(WDT)是一个在软件出错的时候可以复位计算机系统的硬件电路.通常一个用户空间守护进程会在正常的时间间隔内通过/dev/watchdog特殊设备文件来通知内核的watchdog驱动,用户空间仍然正常.当这样的一个通知发生时,驱动通常会告诉硬件watchdog一切正常,然后watchdog应该再等待一段时间来复位系统.如果用户空间出问题(RAM错误,内核bug等),则通知将会停止,然后硬件w

基于S3C2440的嵌入式Linux驱动——看门狗(watchdog)驱动解读

本文将介绍看门狗驱动的实现. 目标平台:TQ2440 CPU:s3c2440 内核版本:2.6.30 1. 看门狗概述 看门狗其实就是一个定时器,当该定时器溢出前必须对看门狗进行"喂狗",如果不这样做,定时器溢出后则将复位CPU. 因此,看门狗通常用于对处于异常状态的CPU进行复位. 具体的概念请自行百度. 2. S3C2440看门狗 s3c2440的看门狗的原理框图如下: 可以看出,看门狗定时器的频率由PCLK提供,其预分频器最大取值为255+1:另外,通过MUX,可以进一步降低频率

一个软件实现的Linux看门狗—soft_wdt

soft_wdt(下面简称本软件)是一个软件实现的Linux看门狗. 本软件是一款开源.免费软件. 下载地址: https://github.com/sunmingbao/soft-wdt/archive/master.zip 本软件和/drivers/watchdog/softdog.c实现的软件看门狗差点儿一样. 基本的不同点是,前者支持一个看门狗.本软件则支持大量的看门狗. soft_wdt代码编译后.生成一个内核模块soft_wdt.ko. 模块载入后,将创建一个设备文件/dev/sof

[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(七)

目标: 1. 完成最终的设备驱动,增加具体的watchdog设备操作的代码. 测试代码: 代码最终实现见cwd_demo.c 代码只实现了read与write.  没有实现ioctl. 因此,我们可以通过shell指令直接操作我们的watchdog. read函数,只读取watchdog的0x01 和0x02寄存器. write函数无论写入多少个字节,驱动实际只写第一个字节. 1. 编译     $ make 2. 装载驱动     $ sudo insmod cwd_demo.ko 3.查看设

watchdog机制

转自:http://blog.sina.com.cn/s/blog_4dff871201012yzh.html 什么是Watchdog? Watchdog,又称watchdog timer,是计算机可靠性(dependability)领域中一个极为简单同时非常有效的检测(detection)工具.其基本思想是针对被监视的目标设置一个计数器和一个阈值,watchdog会自己增加计数值,并等待被监视的目标周期性地重置计数值.一旦目标发生错误,没来得及重置计数值,watchdog会检测到计数值溢出,并

watchdog 启用与测试 &amp; WebRTC

1.  得到系统中soft dog的信息 # modinfo softdog    filename: /lib/modules/3.2.0-4-686-pae/kernel/drivers/watchdog/softdog.ko 2. 加载模块 # insmod /lib/modules/3.2.0-4-686-pae/kernel/drivers/watchdog/softdog.ko 3. 此刻可见/dev/watchdog, 或创建 # mknod /dev/watchdog c 10

Linux内核最顶层文档

Linux 内核文档 该文件是 Linux 内核文档树中最顶层的,会随着内核一起更新:其目的是把散乱的文档集成为一个逻辑清晰的完整版,非常欢迎改善文档,如果想做出自己的贡献,加入vger.kernel.org中的 linuxdoc 列表中 许可证文件 见 Linux 内核源代码 Linux kernel licensing rules 用户导向的文档 以下手册是给那些想最优化某个系统的内核用户准备的 The Linux kernel user's and administrator's guid

misc设备

WatchDog Timer驱动 混杂设备 Misc(或miscellaneous)驱动是一些拥有着共同特性的简单字符设备驱动.内核抽象出这些特性而形成一些API(在文件drivers/char/misc.c中实现),以简化这些设备驱动程序的初始化.所有的misc设备被分配同一个主设备号MISC_MAJOR(10),但是每一个可以选择一个单独的次设备号.如果一个字符设备驱动要驱动多个设备,那么它就不应该用misc设备来实现. 通常情况下,一个字符设备都不得不在初始化的过程中进行下面的步骤: 通过