[外设篇] Linux 看门狗工作原理
作者:CC下载站 日期:2023-10-11 22:05:21 浏览:54 分类:玩电脑
一、什么是看门狗?
简单来说,看门狗就是一个定时器 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工作原理
猜你还喜欢
- 09-06 [系统技巧] windows中,端口查看 关闭进程及Kill使用
- 09-06 [系统教程] Windows系统Git安装教程(详解Git安装过程)
- 06-26 [系统技巧] 远程桌面连接(mstsc)全攻略
- 03-29 [玩系统] Windows下强大的命令终端-Cmder
- 03-29 [系统技巧] Win10右键菜单添加“获取文件管理员权限”选项
- 03-29 [系统技巧] win10删除文件夹需要Administrator权限
- 03-09 [网络技巧] 如何使用IPv6地址直接访问http,https服务及Windows共享文件夹[UNC路径]
- 11-05 [系统技巧] 真的有后悔药!Win10超给力的备份功能你用过吗
- 11-05 [系统技巧] 发现Win11、Win10备份已禁用?帮你快速解决!
- 11-05 [电脑技巧] 科普|F1-F12快捷键有什么用?
- 11-05 [系统技巧] 永劫无间游戏卡顿、闪退 只需检查电脑这个设置
- 11-05 [系统技巧] Win10出现Runtime Error如何修复
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[资料] 【2024年军队文职公共科目/专业课/真题及押题卷】
[少儿教育] 唐诗三百首微电影(全314集)·少儿学唐诗
[资料] 2025军队文职 公共课+专业课+真题+押题+面试【合集】
[课程] 《大师级航拍教程》63节课程视频 MP4格式 5.9G
[资料] 中医鬼才倪海厦全集完整版+资料全集
[课程] 聂佳判断推理绝版课程大集合【8G】
[电视剧] 芈月传 【全集81集全】【未删减版】【国语中字】【2015】【HD720P】【75G】
[电视剧] 封神榜 梁丽版 (1989) 共5集 480P国语无字 最贴近原著的一版【0.98 G】
[影视] 【雪山飞孤4个版本】【1985、1991、1999、2007】【1080P、720P】【中文字幕】【167.1G】
[资料] 24秋初中改版教材全集(全版本)[PDF]
[书籍] 彭子益医书合集 [PDF/DOC]
[游戏] 《黑神话悟空》免安装学习版【全dlc整合完整版】+Steam游戏解锁+游戏修改工具!
[动画] 《名侦探柯南》名侦探柯南百万美元的五菱星 [TC] [MP4]
[动画] 2002《火影忍者》720集全【4K典藏版】+11部剧场版+OVA+漫画 内嵌简日字幕
[剧集] 《斯巴达克斯》1-4季合集 无删减版 1080P 内嵌简英特效字幕
[CG剧情] 《黑神话:悟空》158分钟CG完整剧情合集 4K120帧最高画质
[游戏] 黑神话悟空离线完整版+修改器
[电影] 《变形金刚系列》七部合集 [4K HDR 蓝光] 国英双语音轨 [内封精品特效字幕]【典藏版】235G
[动画] 西游记 (1999) 动画版 4K 全52集 高清修复版 童年回忆
[图像处理] 光影魔术手v4.6.0.578绿色版
[影视] 美国内战 4K蓝光原盘下载+高清MKV版/内战/帝国浩劫:美国内战(台)/美帝崩裂(港) 2024 Civil War 63.86G
[影视] 一命 3D 蓝光高清MKV版/切腹 / 切腹:武士之死 / Hara-Kiri: Death of a Samurai / Ichimei 2011 一命 13.6G
[影视] 爱情我你他 蓝光原盘下载+高清MKV版/你、我、他她他 2005 Me and You and Everyone We Know 23.2G
[影视] 穿越美国 蓝光原盘下载+高清MKV版/窈窕老爸 / 寻找他妈…的故事 2005 Transamerica 20.8G
[电影] 《黄飞鸿》全系列合集
[Android] 开罗游戏 ▎像素风格的模拟经营的游戏厂商安卓游戏大合集
[游戏合集] 要战便战 v0.9.107 免安装绿色中文版
[书籍] 彭子益医书合集 [PDF/DOC]
[系统]【黑果小兵】macOS Big Sur 11.0.1 20B50 正式版 with Clover 5126 黑苹果系统镜像下载
[美图] 【经典收藏美图集合】1500多张韩国美女高清图片让你的收藏夹更加丰富多彩
- 最新评论
-
找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢285552528 评论于:11-09 找了好久的资源bjzchzch12 评论于:11-07 谢谢分享感谢ppy2016 评论于:11-05 谢谢分享感谢ppy2016 评论于:11-05 有靳东!嘻嘻奥古斯都.凯撒 评论于:10-28 流星花园是F4处女作也是4人集体搭配的唯一一部!奥古斯都.凯撒 评论于:10-28 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢AAAAA 评论于:10-26 找了好久的资源,终于在这里找到了。感谢本站的资源和分享。谢谢password63 评论于:10-26 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21 找了好久的资源,终于在这里找齐了!!!!blog001 评论于:10-21
- 热门tag