IMX6UL实现独立硬件看门狗的方案

平台:飞凌嵌入式OKMX6UL开发板

系统:Linux3.14.38

看门狗工作原理:

看门狗其实就是一个可以在一定时间内被复位的计数器。当看门狗开启时,就会自动开始计时,当到达一定时间内没有被复位,就会产生一个复位信号使系统重启。系统正常运行时,需要在看门狗设定的时间间隔内将计数器清零,不让复位信号产生。如果系统不出问题,程序按时“喂狗”,一旦系统跑飞,不能进行“喂狗”,复位信号产生,系统复位重启。

看门狗分类:

1、cpu内部自带的看门狗是将芯片内部的定时器来作为看门狗,通过程序的初始化,写入初值,设置溢出时间,并启动定时器。可以选择开启或关闭。

优点:可以通过程序改变溢出时间;可以随时禁用

缺点:需要初始化,如果在初始化之前系统跑飞,无法实现系统复位,系统恢复能力降低。

2、独立看门狗芯片是一个独立的芯片,主要有一个喂狗引脚和一个复位引脚,如果没有在一定时间内改变喂狗引脚的电平状态,就会输出复位信号,使系统进行复位。此类看门狗一旦上电,无法禁用。

优点:无需配置,上电即用。无法禁用,系统恢复能力强。

缺点:无法灵活配置溢出时间,灵活性降低。

本文主要想在OKMX6UL开发板上适配独立看门狗芯片

如果想使用独立看门狗芯片,主要分为两部分:1、uboot启动过程中喂狗;2、内核启动过程中喂狗;

一、uboot启动过程中喂狗实现:

uboot源码中有看门狗的接口,可以通过宏定义CONFIG_HW_WATCHDOG来实现。

1、include/configs/mx6ul_14x14_evk.h中添加宏定义

#define CONFIG_HW_WATCHDOG

2、board/freescale/mx6ul_14x14_evk/mx6ul_14x14_evk.c中添加引脚复用及喂狗函数

static iomux_v3_cfg_t const iox_pads[] = {MX6_PAD_SNVS_TAMPER9__GPIO5_IO09 | MUX_PAD_CTRL(NO_PAD_CTRL),
};
void hw_watchdog_reset(void)
{gpio_direction_output(IMX_GPIO_NR(5,9), 0);gpio_direction_output(IMX_GPIO_NR(5,9), 1);}

二、内核启动过程中喂狗实现:

添加一个定时器驱动,在定时器服务函数 中实现喂狗

1、设备树添加节点

  32         hw-wdt-gpio {33                 compatible = "hw-gpio";34                 pinctrl-names = "default";35                 gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;36                 status = "okay";37 38         };

2、添加驱动

  1 2 #include <linux/kernel.h>3 #include <linux/types.h>4 #include <linux/init.h>5 #include <linux/platform_device.h>6 #include <linux/gpio.h>7 #include <linux/of_platform.h>8 #include <linux/of.h>9 #include <linux/of_gpio.h>10 #include <linux/slab.h>11 #include <linux/workqueue.h>12 #include <linux/module.h>13 #include <linux/device.h>14 #include <asm/io.h>15 #include <asm/uaccess.h>16 #include <linux/fs.h>17 #include <linux/timer.h>18 19 MODULE_LICENSE("Dual BSD/GPL");20 struct timer_list mytimer;21 struct device_node *wdt_nd;22 int wdt_gpio;23 static unsigned int flag=0;24 void timeout_handle (unsigned long arg)25 {26         flag=!flag;27         gpio_direction_output(wdt_gpio,flag);        //电平翻转,实现喂狗28         mod_timer(&mytimer, jiffies + msecs_to_jiffies(200)); //重置定时器的溢出时间200ms29 }30 static int wdt_init(void)31 {32         int ret=0;33         wdt_nd=of_find_node_by_path("/hw-wdt-gpio");       //获取设备树中hw-wdt-gpio节点34         wdt_gpio=of_get_named_gpio(wdt_nd,"gpios",0);        //获取喂狗引脚的gpio号35         ret=gpio_direction_output(wdt_gpio,1);36         ret=gpio_direction_output(wdt_gpio,0);              //喂狗37         printk(KERN_ALERT "----------------wdt_init-----------\n");38         init_timer(&mytimer);        //初始化定时器39         mytimer.expires = jiffies + (HZ/5);        //设置超时时间。此处设置为200ms40         mytimer.data = 1;        //date为传到定时器处理函数的参数,没有用到设置为141         mytimer.function = timeout_handle;   //定时器处理函数42         add_timer(&mytimer);    //启动定时器43 44         return 0;45 }46 static void wdt_exit(void)47 {48 49         printk(KERN_ALERT "Goodbye, HW-WDT\n");50         del_timer_sync(&mytimer);51 }52 module_init(wdt_init);53 module_exit(wdt_exit);

此驱动越早加载越好,所以将此驱动放到了drivers/gpio目录下,并修改Makefile文件

  1 # generic gpio support: platform drivers, dedicated expander chips, etc2 3 ccflags-$(CONFIG_DEBUG_GPIO)    += -DDEBUG4 5 obj-y           += gpio-hw-wdt.o
...

通过打印信息,查看驱动加载时间
内核启动后271ms后加载了定时器驱动。

IMX6UL实现独立硬件看门狗的方案相关推荐

  1. 基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的思路

    关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 这是一篇旧文,技术交流群有人在讨论这个问题,今天就来分享一下. 我们都知道硬件看门狗的目的:是用来监 ...

  2. 软件看门狗和硬件看门狗

    看门狗,又叫watchdog timer,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中的输入叫做喂狗,输出一般连接到另外一个部分的复位端,另外一个部分就是所要处理的部分,暂且称之为M ...

  3. 硬件看门狗和软件看门狗

    看门狗分硬件看门狗和软件看门狗.硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称"喂狗"),因此程序正常工作时,定时器总不能溢出 ...

  4. 服务器看门狗芯片电路图,新型纯硬件看门狗电路设计分析研究

    摘   要:看门狗电路是电子电路中一种非常常见的电路,常用的看门狗电路在喂狗进程工作,CPU死机的状态时,可以重新复位CPU,防止CPU跑飞.但是在一些极端条件下,看门狗进程也会挂死,例如温度过高等, ...

  5. 嵌入式系统的软件看门狗和硬件看门狗

    本文从原理.异同.举例来说明硬件软件看门狗怎么选择: 一. 硬件看门狗的原理 硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称"喂狗&qu ...

  6. 服务器看门狗硬件,软件看门狗和硬件看门狗的作用和区别

    软件看门狗和硬件看门狗的作用和区别 工业级无线路由器,作为无线组网中非常重要的设备,洞察客户应用场景,只要是关乎无线组网可靠性的需求,即使是最细微的技术应用都要做到极致,比如看门狗. 为什么工业级无线 ...

  7. STM32硬件看门狗的使用

    本文使用STM32 STLink Utility和STM32CUBELDE 1.手动添加库文件 由于使用硬件看门狗,在STM32CUBELDE内的图形界面设置时不使能看门狗. 由于STM32CUBEL ...

  8. linux 硬件看门狗 软件看门狗,如何确定机器上是否实现了硬件或软件看门狗?...

    我有一台我试图开发的嵌入式计算机,我想知道它的看门狗是软件看门狗还是硬件看门狗. 首先我查看了,我看到/ dev / watchdog存在于/ dev中.但是当我发布ps时,我没有看到看门狗进程.所以 ...

  9. window硬件看门狗(喂狗程序) WinIo32/WinIo64

    电脑BIOS设置开启硬件看门狗及设置喂狗超时时间,操作系统启动后自动运行喂狗程序(对电脑的io口进行控制 ) 下载地址: https://download.csdn.net/download/arno ...

最新文章

  1. 谷歌正在测试一个人工智能系统,帮助视障人士参加跑步比赛
  2. 大数据+人工智能正以八种方式撼动商界
  3. Verilog中基本的数据类型
  4. 【oracle】关于创建表时用default指定默认值的坑
  5. 值得收藏的Python小技巧:这17个骚操作你都OK吗?
  6. ahjesus Axure RP 7.0注册码
  7. 写入和读取外部存储文件
  8. CSS:transform
  9. Java基础——分隔符
  10. IE兼容模式文件上传所遇问题解决
  11. css3动画停留在最后一帧
  12. 任正非:华为要做追上特斯拉的大乌龟
  13. 英特尔cpu发布时间表_英特尔延长CPU发布周期:摩尔定律终结
  14. 制作和删除软RAID
  15. java树状结构递归与非递归实现,外加sql递归实现
  16. linux 数据库 函数是什么,MySQL数据库函数(一)
  17. WIFI基础入门--802.11--成帧细节(管理帧)--5
  18. python怎么去掉换行符_在Python中,如何去除行末的换行符?
  19. python爬取汽车之家图片,Python requests 爬取汽车之家全部品牌logo,urllib下载到本地...
  20. mysql加入安装策略_MySQL——安装

热门文章

  1. 国内自助建站平台哪些适合小白用户想建站?
  2. 电脑开机显示器无反应,主机正常-解决思路,解决办法
  3. JavaWeb项目:新闻发布系统02(新闻系统功能制作)
  4. catkin创建workspace
  5. 计算机显示器上有条纹,电脑显示器出现条纹的解决参考
  6. 计算机开机没反应怎么办,电脑开机没反应怎么办?解决方法原来那么简单!
  7. 广告行业中那些趣事系列2:BERT实战NLP文本分类任务(附github源码)
  8. LabVIEW控制前面板对象
  9. mysql中in和exits的区别及使用
  10. React创建项目(保姆级讲解,配置文件详细介绍)