IMX6UL实现独立硬件看门狗的方案
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实现独立硬件看门狗的方案相关推荐
- 基于STM32、FreeRTOS实现硬件看门狗+软件看门狗监测多任务的思路
关注+星标公众号,不错过精彩内容 作者 | strongerHuang 微信公众号 | 嵌入式专栏 这是一篇旧文,技术交流群有人在讨论这个问题,今天就来分享一下. 我们都知道硬件看门狗的目的:是用来监 ...
- 软件看门狗和硬件看门狗
看门狗,又叫watchdog timer,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中的输入叫做喂狗,输出一般连接到另外一个部分的复位端,另外一个部分就是所要处理的部分,暂且称之为M ...
- 硬件看门狗和软件看门狗
看门狗分硬件看门狗和软件看门狗.硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称"喂狗"),因此程序正常工作时,定时器总不能溢出 ...
- 服务器看门狗芯片电路图,新型纯硬件看门狗电路设计分析研究
摘 要:看门狗电路是电子电路中一种非常常见的电路,常用的看门狗电路在喂狗进程工作,CPU死机的状态时,可以重新复位CPU,防止CPU跑飞.但是在一些极端条件下,看门狗进程也会挂死,例如温度过高等, ...
- 嵌入式系统的软件看门狗和硬件看门狗
本文从原理.异同.举例来说明硬件软件看门狗怎么选择: 一. 硬件看门狗的原理 硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称"喂狗&qu ...
- 服务器看门狗硬件,软件看门狗和硬件看门狗的作用和区别
软件看门狗和硬件看门狗的作用和区别 工业级无线路由器,作为无线组网中非常重要的设备,洞察客户应用场景,只要是关乎无线组网可靠性的需求,即使是最细微的技术应用都要做到极致,比如看门狗. 为什么工业级无线 ...
- STM32硬件看门狗的使用
本文使用STM32 STLink Utility和STM32CUBELDE 1.手动添加库文件 由于使用硬件看门狗,在STM32CUBELDE内的图形界面设置时不使能看门狗. 由于STM32CUBEL ...
- linux 硬件看门狗 软件看门狗,如何确定机器上是否实现了硬件或软件看门狗?...
我有一台我试图开发的嵌入式计算机,我想知道它的看门狗是软件看门狗还是硬件看门狗. 首先我查看了,我看到/ dev / watchdog存在于/ dev中.但是当我发布ps时,我没有看到看门狗进程.所以 ...
- window硬件看门狗(喂狗程序) WinIo32/WinIo64
电脑BIOS设置开启硬件看门狗及设置喂狗超时时间,操作系统启动后自动运行喂狗程序(对电脑的io口进行控制 ) 下载地址: https://download.csdn.net/download/arno ...
最新文章
- 谷歌正在测试一个人工智能系统,帮助视障人士参加跑步比赛
- 大数据+人工智能正以八种方式撼动商界
- Verilog中基本的数据类型
- 【oracle】关于创建表时用default指定默认值的坑
- 值得收藏的Python小技巧:这17个骚操作你都OK吗?
- ahjesus Axure RP 7.0注册码
- 写入和读取外部存储文件
- CSS:transform
- Java基础——分隔符
- IE兼容模式文件上传所遇问题解决
- css3动画停留在最后一帧
- 任正非:华为要做追上特斯拉的大乌龟
- 英特尔cpu发布时间表_英特尔延长CPU发布周期:摩尔定律终结
- 制作和删除软RAID
- java树状结构递归与非递归实现,外加sql递归实现
- linux 数据库 函数是什么,MySQL数据库函数(一)
- WIFI基础入门--802.11--成帧细节(管理帧)--5
- python怎么去掉换行符_在Python中,如何去除行末的换行符?
- python爬取汽车之家图片,Python requests 爬取汽车之家全部品牌logo,urllib下载到本地...
- mysql加入安装策略_MySQL——安装