目  录

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

1  引言

1.1  编写目的

本文档概要记录了看门狗的设计背景、设计方案、运行流程、及应用方法等,让读者能够了解和使用看门狗

1.2   背景

在嵌入式应用系统中,有效的应用程序必须稳定、可靠的长期运行其产品才能算是一个稳健的产品,但由于系统的种种未知原因导致程序不能正常运行出现跑飞、卡死等异常情况,在未能解决实质出错问题的时候看门狗可做临时复位操作来提高系统的可靠性。看门狗本身不是用来解决系统出现的问题,在调试过程中发现的故障应该要查改设计本身的错误。加入看门狗目的是对一些程序潜在错误和恶劣环境干扰等因素导致系统死机而在无人干预情况下自动恢复系统正常工作状态。看门狗也不能完全避免故障造成的损失,毕竟从发现故障到系统复位恢复正常这段时间内怠工。同时一些系统也需要复位前保护现场数据,重启后恢复现场数据,这可能也需要一笔软硬件的开销。

本设计针对mifi项目中出现ap_service概率性出现cpu为0%而导致mifi假死可用作恢复处理,提高系统的稳定性让mifi能正常使用。

1.3   定义与缩写

本文档中使用的术语如表1-1术语表所示。

表1-1 术语表

缩写、术语

解 释

WatchDog

看门狗

SysMonitor

系统监控

Timer

定时器

Cpu

处理器

Server

服务端

Client

客户端

1.1   参考资料

《使用 watchdog 构建高可用性的 Linux 系统及应用》

本模块概要设计的参考资料如表1-2 参考资料表所示。

序号

文档名称

作者或资料来源

1

 《Linux高级程序设计》

Jon Masters&Richard Blum

2

 《linux网络编程》

 宋敬彬、孙海滨

3

 

 

4

 

 

5

 

 

1  总体设计

1.1  看门狗设计原理

看门狗分可分为硬件看门狗和软件看门狗两种。

硬件看门狗的主体是一个定时电路,并由被监控CPU提供周期性“喂狗”信号,对定时器清零(俗称“清狗”)。CPU正常工作时,由于能定时“清狗”,看门狗内的定时器不会溢出。当CPU出现故障,则不能继续提供“清狗”信号,使得看门狗内定时器不断累加而溢出,从而触发一个复位信号对CPU进行复位,使CPU重新工作。

软件看门狗原理上一样,只是将硬件电路上的定时器用内部定时器代替。本设计使用软件看门狗方案。

1.2  需求规定

实时地对mifi嵌入式系统中的ap_service进程进行监控,当发现ap_service异常(cpu为0%)时重启ap_service进程让其恢复正常。

1.3  运行环境

Cpu:armv7  System:oelinux

1.4  设计说明

由于项目中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   接口设计

1.1  用户接口

1.1.1   Libevent接口

序号

入口函数

输入参数

功能描述

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.1.2   Watchdog Server端接口

序号

名称

输入参数

功能描述

1

 wdg_main_sighandler_cb()

 Signo 信号

 信号处理函数

2

askey_init_watchdog_server()

 Null

 初始化看门狗server

3

askey_release_watchdog_service()

 Null

 释放看门狗servsr

1.1.3   Watchdog Client端接口

序号

名称

输入参数

功能描述

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

 系统监控回调函数

2  数据结构设计

数据结构名

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进程的基本信息

3   系统细节设计

3.1  调试信息

调试由自己封装的宏函数作打印调试,如图1-5

1.1  关键定义

/**系统timer检测时间5s**/

#define ASKEY_WDG_MONITOR_TIME (5)

/**读超时时间5s**/

#define WDG_CLIENT_READ_TIMEVAL(5)

/**客户端连接心跳时间1s**/

#defineWDG_CLIENT_KEEPLIVE_TIMEVAL  (1)

/**客户端连接最大超时时间30s**/

#defineWDG_CLIENT_KEEPLIVE_MAX_TIMEOUT (30)

/**客户端最大连接数 2**/

#define ASKEY_WDG_MAX_CLIENT_NUM(2)

1.2  时间说明

Watchdog servsr端timer为周期性触发每隔5s会做一次“喂狗”标志检测,若 “喂狗”标志为1则表示已喂狗,ap_service运行正常,timer进入下个周期;若 “喂狗”标志为0则表示超时未喂狗,ap_service运行异常须做重启操作。

watchdog客户端每3s发出一次喂狗操作,同时检测server端的回馈包

Watchdog servsr端判断client 30s未收到数据会判断超时会自动断开连接。

1.3  运行顺序

由于此设计是基于c/s模式,所以正确的启动顺序为:

启动askey_watchdog_server--->ap_service(watchdog_client)

1.4  测试方法

Ap_service是概率性出现cpu为0%的情况,我们可以用kill –STOP命令模拟ap_servicecpu为0的情况

5.5.1具体方法

1、mifi系统植入watchdog之后,正常开机运行

2、连接好usb线,adb  shell工具登录终端

3、发送命令:kill –STOP $(pgrep "ap_service")

(note:kill –STOP pid命令可以让ap_service停止,此时ap_service的system_monitor线程将不会进行“喂狗”操作,从而导致watchdog server timer检测出未进行喂狗操作“杀死”ap_service,之后ap_service重启之后连接watchdog server正常“喂狗”,系统正常恢复)

源代码可联系索要。

Watchdog Design相关推荐

  1. Idling along, (or what to do in the idle task)

    by Nigel Jones 原文: http://embeddedgurus.com/stack-overflow/2013/04/idling-along/ =================== ...

  2. Low Power Design in SoC Using Arm IP

    Low Power Design in SoC Using Arm IP Documentation – Arm Developer Documentation – Arm Developer By ...

  3. Design Pattern的万剑归宗 = Mediator

    Overview 今天看了YouTube上的一个讲Design Pattern的视频,把这个视频的大意给大家分享一下,该视频的作者是Anthony Ferrara. 大意就是作者把22种Design ...

  4. 激光雷达Lidar Architecture and Lidar Design(下)

    激光雷达Lidar Architecture and Lidar Design(下) Considerations on Lidar Design 双基地还是单基地? 双轴还是同轴? 几何重叠 向上还 ...

  5. 激光雷达Lidar Architecture and Lidar Design(上)

    激光雷达Lidar Architecture and Lidar Design(上) 介绍 激光雷达结构: 基本条件 构型和基本布置 激光雷达设计: 基本思想和基本原则 总结 介绍 激光雷达结构是激光 ...

  6. 安卓Design包之AppBar和Toolbar的联用

    前面讲了Design包的的CoordinatorLayout和SnackBar的混用,现在继续理解Design包的AppBar; AppBarLayout跟它的名字一样,把容器类的组件全部作为AppB ...

  7. 面向Mobile device的CNN模型手工设计与NAS分析总结,MobileNet V1,V2,V3,Efficient,MNasNet以及Efficient network design

    手工方法和NAS的高效网络模型设计总结与分析 这篇文章主要关注对于移动端,资源受限平台的高效神经网络设计(Manually)和搜索(NAS). ​​​​​​高效的CNN设计不只是用在服务器,云端,资源 ...

  8. 输入引脚时钟约束_Happy Design in Vivado 系列:时序分析入门三板斧(一):创建时钟...

    本系列中我们将一起探寻 Xilinx FPGA 的硬件开发环境 Vivado,发现 Vivado 的 Design Flow,使用 Tips...或许再来一些 BUG?Happy Design in ...

  9. LeetCode刷题记录13——705. Design HashSet(easy)

    LeetCode刷题记录13--705. Design HashSet(easy) 目录 LeetCode刷题记录13--705. Design HashSet(easy) 前言 题目 语言 思路 源 ...

最新文章

  1. 荐号 | 技术人如何在职场竞争中处于优势地位
  2. javap查看class文件
  3. php防止注入漏洞,php防止sql注入漏洞代码
  4. 设计器的使用及常用控件
  5. 无代码iVX编程实现简单跳跃超级玛丽游戏
  6. java 生成校验验证码_java 验证码生成与校验
  7. Atitit 硬件 软件 的开源工作 差异对比
  8. Firefox 67不能勾选“以后自动采用相同的动作处理此类文件”解决方案
  9. JAVA上百实例源码以及开源项目
  10. 怎么把网页转成PDF?
  11. 【算法设计与分析】(6)算24点问题(回溯法)
  12. python爬虫之爬取招聘岗位信息
  13. 开发者必看|Android 8.0 新特性及开发指南
  14. OpenGL 入门 17:立方体贴图
  15. 连接无线上网服务器能查到吗,网络管理历史-怎样才能不让服务器查到自己上网记录我们单位 – 手机爱问...
  16. 利用USGS网站下载Landsat系列影像(个人总结的小技巧,适用新手小白)
  17. maven同一个项目中,一个子模块引用另一个子模块的类的方法
  18. perl下载文件和图片
  19. tws蓝牙耳机什么牌子好?2023tws耳机推荐
  20. 农村挣钱好项目,特色产品让你更有竞争力

热门文章

  1. C# Messager深入
  2. gerrit地址无法访问
  3. GBK和UTF8什么区别
  4. 笔记本电脑换机械硬盘
  5. 深入理解Java设计模式——状态模式
  6. 惠普笔记本电脑星(14/15)系列拆机历险记
  7. 程世东老师TensorFlow实战——个性化推荐,代码学习笔记之③推荐过程
  8. html阅读开放试用阶段 欢迎体验,HTML5新感观 欧朋浏览器H5体验版试用
  9. 在Linux/centos下查看网卡型号,如何查看主板型号,CPU/显卡信息,硬盘型号等硬件信息
  10. java xfire_Java -- 在Eclipse上使用XFire开发WebService