[外设篇] Linux 看门狗工作原理
作者:精品下载站 日期:2023-10-11 22:05:21 浏览:68 分类:玩电脑
一、什么是看门狗?
简单来说,看门狗就是一个定时器 Watchdog Timer(WDT),是一个在软件出错时可以让 Linux 系统复位的硬件电路。以下简述一下其工作原理:
在用户空间通过看门狗程序以“喂狗”的形式不断地给 watchdog 写入数据(即通过 /dev/watchdog 特殊设备文件来通知内核的 watchdog 驱动)。当在一定时间内如果不喂狗(即没有往 watchdog 写入数据),它就执行一次系统复位,也就跳到中断向量表执行复位向量。
二、看门狗内核源码分析
在内核中提供了一套完整的驱动接口,具体如下:
wdt_open : 打开设备,程序调用 open 时进入该函数
wdt_close : 关闭设备,程序调用 close 时进入该函数
wdt_write : 写设备,若传入数据大小不为 0 则喂狗; 程序调用 write 时进入该函数
wdt_ioctl : 这个函数是最主要的,原型如下(driver/watchdog)
wdt_ioctl 驱动源码实现如下(以 w83697hf 为例):
static long wdt_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { void __user *argp = (void __user *)arg; int __user *p = argp; int new_timeout; static const struct watchdog_info ident = { .options = WDIOF_KEEPALIVEPING | WDIOF_SETTIMEOUT | WDIOF_MAGICCLOSE, .firmware_version = 1, .identity = "W83697HF WDT", }; switch (cmd) { case WDIOC_GETSUPPORT: if (copy_to_user(argp, &ident, sizeof(ident))) return -EFAULT; break; case WDIOC_GETSTATUS: case WDIOC_GETBOOTSTATUS: return put_user(0, p); case WDIOC_SETOPTIONS: { int options, retval = -EINVAL; if (get_user(options, p)) return -EFAULT; if (options & WDIOS_DISABLECARD) { wdt_disable(); retval = 0; } if (options & WDIOS_ENABLECARD) { wdt_enable(); retval = 0; } return retval; } case WDIOC_KEEPALIVE: wdt_ping(); break; case WDIOC_SETTIMEOUT: if (get_user(new_timeout, p)) return -EFAULT; if (wdt_set_heartbeat(new_timeout)) return -EINVAL; wdt_ping(); /* Fall */ case WDIOC_GETTIMEOUT: return put_user(timeout, p); default: return -ENOTTY; } return 0; }
简述其中重要的参数:
WDIOC_KEEPALIVE : 喂狗,类似于 write 函数功能
WDIOC_SETTIMEOUT : 设置超时值
WDIOC_GETTIMEOUT : 获取超时值
WDIOC_SETOPTIONS : 设置看门狗状态,开启(WDIOS_ENABLECARD) 或 关闭(WDIOS_DISABLECARD)
三、编写看门狗程序
#include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/types.h> #include <linux/watchdog.h> static int open_watchdog(void) { int wtd_fd = 0; wtd_fd = open("/dev/watchdog", O_RDWR); if (wtd_fd < 0) return -1; int timeout = 60; //60s ioctl(wtd_fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD); ioctl(wtd_fd, WDIOC_SETTIMEOUT, &timeout); return wtd_fd; } static void feed_watchdog(int wtd_fd) { while (1) { ioctl(wtd_fd, WDIOC_KEEPALIVE, NULL); sleep(10); } } static int close_watchdog(int wtd_fd) { ioctl(wtd_fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); close(wtd_fd); } int main(void) { int wtd_fd = 0; /* 打开设备 */ wtd_fd = open_watchdog(void); if (wtd_fd < 0) { printf("wtd open failed\n"); return -1; } /* 喂狗 */ feed_watchdog(wtd_fd); /* 关闭设备 */ close_watchdog(wtd_fd); return 0; }
四、关于看门狗作用的特别说明
1. 在实际应用中,一般都是不需要主动去关闭看门狗(close 或 WDIOS_DISABLECARD)的,因为关闭看门狗后它就不能工作了,也就无法实现系统复位。只有当你明确不需要看门狗功能生效时,才可主动关闭看门狗;
2. 当程序奔溃或者软重启失败后,看门狗是让系统复位的最后保障了(假如连看门狗也失效了,那就只能乖乖地拔插电源让系统重启了)。
- 上一篇:[福利线报] 天猫超市翻牌抽1~5元猫超卡
- 下一篇:[外设篇] I2C工作原理
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag