Watchdog Design
目 录
1 引言.... 3
1.1 编写目的.... 3
1.2 背景.... 3
1.3 定义与缩写.... 3
1.4 参考资料.... 3
2 总体设计.... 4
2.1 看门狗设计原理.... 4
2.2 需求规定.... 4
2.3 运行环境.... 4
2.4 设计说明.... 4
2.5 设计逻辑图.... 5
2.6 看门狗运行依赖.... 6
2.7 流程图.... 6
3 接口设计.... 7
3.1 用户接口.... 7
3.1.1 Libevent接口.... 7
3.1.2 WatchdogServer端接口.... 8
3.1.3 WatchdogClient端接口.... 8
4 数据结构设计.... 8
5 系统细节设计.... 10
5.1 调试信息.... 10
5.2 关键定义.... 10
5.3 时间说明.... 10
5.4 运行顺序.... 11
5.5 测试方法.... 11
5.5.1具体方法.... 11
6 附录(部分源代码).... 11
本文档概要记录了看门狗的设计背景、设计方案、运行流程、及应用方法等,让读者能够了解和使用看门狗
本设计针对mifi项目中出现ap_service概率性出现cpu为0%而导致mifi假死可用作恢复处理,提高系统的稳定性让mifi能正常使用。
缩写、术语 |
解 释 |
WatchDog |
看门狗 |
SysMonitor |
系统监控 |
Timer |
定时器 |
Cpu |
处理器 |
Server |
服务端 |
Client |
客户端 |
《使用 watchdog 构建高可用性的 Linux 系统及应用》
序号 |
文档名称 |
作者或资料来源 |
1 |
《Linux高级程序设计》 |
Jon Masters&Richard Blum |
2 |
《linux网络编程》 |
宋敬彬、孙海滨 |
3 |
|
|
4 |
|
|
5 |
|
|
软件看门狗原理上一样,只是将硬件电路上的定时器用内部定时器代替。本设计使用软件看门狗方案。
实时地对mifi嵌入式系统中的ap_service进程进行监控,当发现ap_service异常(cpu为0%)时重启ap_service进程让其恢复正常。
由于项目中ap_service进程有自动重启功能如图1-1:
图1-1
项目中要求ap_service出现异常后只需要快速的恢复就好,需求特殊所以我们将看门狗超时处理设置为强行杀死ap_service进程后ap_service则会自重启来恢复来代替整个系统的重启开销。
根据特殊需求我们将看门狗设计成两个部分,一部分为WatchdogServer端,另一部分为WatchdogClient端,两端用回送地址127.0.0.1进行通信,server端独立于client端,client端植入ap_service进程中(ap_service启用sysmonitor监视线程)。
1.1 设计逻辑图
Ap_service和Watchdog之间的关系如图1-2
1.1 看门狗运行依赖
本设计的看门狗服务器端相当于一个独立的监控程序,所以其必须依赖一个稳定的linux嵌入式系统,否则一切归零,内部定时器也要稳定、可靠,本设计用的基于事件驱动的libevent第三方库,本地的socket通信也要稳定可靠。
1.2 流程图
看门狗server端,如图1-3
看门狗client端,如图1-4
序号 |
入口函数 |
输入参数 |
功能描述 |
1 |
askey_libevent_init() |
Null |
初始化libevent |
2 |
askey_libevent_loop() |
Null |
循环事件 |
3 |
askey_libevent_exit() |
Null |
Libevent退出 |
4 |
askey_libevent_add_timeout() |
int sec 时间(s) event_callback_fn timeout_cb 回调函数 askey_timer_t_type_e type 触发类型 void *arg 参数 |
添加timer并注册回调函数 |
5 |
askey_libevent_del_timeout() |
int *ev_handle |
删除指定timer |
序号 |
名称 |
输入参数 |
功能描述 |
1 |
wdg_main_sighandler_cb() |
Signo 信号 |
信号处理函数 |
2 |
askey_init_watchdog_server() |
Null |
初始化看门狗server |
3 |
askey_release_watchdog_service() |
Null |
释放看门狗servsr |
序号 |
名称 |
输入参数 |
功能描述 |
1 |
system_monitor_run () |
Null |
运行系统监控 |
2 |
create_thread () |
pthread_t* thread_hdl askey_thread_callback callback 回调函数 void *arg 参数 |
创建PTHREAD_CREATE_JOINABLE属性的线程 |
3 |
system_monitor_thr_cb() |
Null |
系统监控回调函数 |
数据结构名 |
wdg_server_info_t |
定义模块 |
server |
||
功能简述 |
看门狗server基本信息结构体 |
类型 |
结构体 |
||
成员 |
成员名 |
类型 |
初始值 |
说明 |
|
fd |
int |
0 |
通信socket |
||
Is_thr_run |
int |
0 |
Watchdog server运行状态 |
||
Port |
unsigned short |
0 |
端口 |
||
|
Reserv |
unsigned short |
0 |
||
|
Pid |
pthread_t |
0 |
线程id |
|
详细描述 |
记录watchdog server的信息状态 |
数据结构名 |
wdg_cli_conn_inf_t |
定义模块 |
server |
||
功能简述 |
看门狗client基本信息结构体 |
类型 |
结构体 |
||
成员 |
成员名 |
类型 |
初始值 |
说明 |
|
fd |
int |
0 |
通信socket |
||
pthread_run_stat |
pthread_t |
0 |
线程id |
||
Timer |
Int |
0 |
计时器 |
||
|
timer_times |
Int |
0 |
连接时间 |
|
详细描述 |
记录watchdog client的信息状态 |
数据结构名 |
ASKEY_CMD_MSG_TYPE_E |
定义模块 |
server |
||
功能简述 |
通信命令 |
类型 |
枚举 |
||
成员 |
成员名 |
类型 |
初始值 |
说明 |
|
ASKEY_CMD_WDG_KEEPLIVE_ASK |
enum |
0x3001 |
心跳 |
||
ASKEY_CMD_SYS_INF_ASK |
enum |
0x3002 |
Client 信息 |
||
ASKEY_SYS_EXCEPTION |
enum |
0x3003 |
异常 |
||
详细描述 |
Server和client的通信命令 |
数据结构名 |
cmr_msg_header |
定义模块 |
server |
||
功能简述 |
通信基本包 |
类型 |
结构体 |
||
成员 |
成员名 |
类型 |
初始值 |
说明 |
|
ASKEY_CMD_MSG_TYPE_E |
enum |
0 |
通信命令 |
||
msg_len |
Int |
0 |
额外数据长度 |
||
详细描述 |
Server和client的基本通信包 |
数据结构名 |
askey_sys_inf_t |
定义模块 |
server |
||
功能简述 |
Client sysinfo |
类型 |
结构体 |
||
成员 |
成员名 |
类型 |
初始值 |
说明 |
|
pid |
Int |
0 |
Client进程号 |
||
proc_path |
Char* |
0 |
运行路径 |
||
详细描述 |
Client进程的基本信息 |
1.1 关键定义
#define ASKEY_WDG_MONITOR_TIME (5)
#define WDG_CLIENT_READ_TIMEVAL(5)
#defineWDG_CLIENT_KEEPLIVE_TIMEVAL (1)
#defineWDG_CLIENT_KEEPLIVE_MAX_TIMEOUT (30)
#define ASKEY_WDG_MAX_CLIENT_NUM(2)
watchdog客户端每3s发出一次喂狗操作,同时检测server端的回馈包
Watchdog servsr端判断client 30s未收到数据会判断超时会自动断开连接。
启动askey_watchdog_server--->ap_service(watchdog_client)
Ap_service是概率性出现cpu为0%的情况,我们可以用kill –STOP命令模拟ap_servicecpu为0的情况
3、发送命令:kill –STOP $(pgrep "ap_service")
源代码可联系索要。
Watchdog Design相关推荐
- Idling along, (or what to do in the idle task)
by Nigel Jones 原文: http://embeddedgurus.com/stack-overflow/2013/04/idling-along/ =================== ...
- Low Power Design in SoC Using Arm IP
Low Power Design in SoC Using Arm IP Documentation – Arm Developer Documentation – Arm Developer By ...
- Design Pattern的万剑归宗 = Mediator
Overview 今天看了YouTube上的一个讲Design Pattern的视频,把这个视频的大意给大家分享一下,该视频的作者是Anthony Ferrara. 大意就是作者把22种Design ...
- 激光雷达Lidar Architecture and Lidar Design(下)
激光雷达Lidar Architecture and Lidar Design(下) Considerations on Lidar Design 双基地还是单基地? 双轴还是同轴? 几何重叠 向上还 ...
- 激光雷达Lidar Architecture and Lidar Design(上)
激光雷达Lidar Architecture and Lidar Design(上) 介绍 激光雷达结构: 基本条件 构型和基本布置 激光雷达设计: 基本思想和基本原则 总结 介绍 激光雷达结构是激光 ...
- 安卓Design包之AppBar和Toolbar的联用
前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...
- 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design
手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). 高效的CNN设计不只是用在服务器,云端,资源 ...
- 输入引脚时钟约束_Happy Design in Vivado 系列:时序分析入门三板斧(一):创建时钟...
本系列中我们将一起探寻 Xilinx FPGA 的硬件开发环境 Vivado,发现 Vivado 的 Design Flow,使用 Tips...或许再来一些 BUG?Happy Design in ...
- LeetCode刷题记录13——705. Design HashSet(easy)
LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...
最新文章
- 荐号 | 技术人如何在职场竞争中处于优势地位
- javap查看class文件
- php防止注入漏洞,php防止sql注入漏洞代码
- 设计器的使用及常用控件
- 无代码iVX编程实现简单跳跃超级玛丽游戏
- java 生成校验验证码_java 验证码生成与校验
- Atitit 硬件 软件 的开源工作 差异对比
- Firefox 67不能勾选“以后自动采用相同的动作处理此类文件”解决方案
- JAVA上百实例源码以及开源项目
- 怎么把网页转成PDF?
- 【算法设计与分析】(6)算24点问题(回溯法)
- python爬虫之爬取招聘岗位信息
- 开发者必看|Android 8.0 新特性及开发指南
- OpenGL 入门 17:立方体贴图
- 连接无线上网服务器能查到吗,网络管理历史-怎样才能不让服务器查到自己上网记录我们单位 – 手机爱问...
- 利用USGS网站下载Landsat系列影像(个人总结的小技巧,适用新手小白)
- maven同一个项目中,一个子模块引用另一个子模块的类的方法
- perl下载文件和图片
- tws蓝牙耳机什么牌子好?2023tws耳机推荐
- 农村挣钱好项目,特色产品让你更有竞争力
热门文章
- C# Messager深入
- gerrit地址无法访问
- GBK和UTF8什么区别
- 笔记本电脑换机械硬盘
- 深入理解Java设计模式——状态模式
- 惠普笔记本电脑星(14/15)系列拆机历险记
- 程世东老师TensorFlow实战——个性化推荐,代码学习笔记之③推荐过程
- html阅读开放试用阶段 欢迎体验,HTML5新感观 欧朋浏览器H5体验版试用
- 在Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息
- java xfire_Java -- 在Eclipse上使用XFire开发WebService