uboot 看门狗喂狗
一、说明:
看门狗,又叫watchdog timer,主要用来监控、管理CPU的运行状态,并对处于异常状态中的CPU进行复位操作,使其能重新工作。
看门狗可分为硬件看门狗和软件看门狗两种。
喂狗操作:WDI(Watchdog Input)的电平信号超过1.6S不发生跳变时,就会让系统重启,所以只需让WDI在每个1.6s内遇到一个上升沿或者下降沿即可。
其他更详细的内容请自己在网上查找。
二、uboot代码修改
1、
在include/watchdog.h文件中有宏定义
#ifdef CONFIG_HW_WATCHDOG
#if defined(ASSEMBLY)
#define WATCHDOG_RESET bl hw_watchdog_reset
#else
extern void hw_watchdog_reset(void);
#define WATCHDOG_RESET hw_watchdog_reset
#endif
所以,需要打开CONFIG_HW_WATCHDOG开关以及实现hw_watchdog_reset喂狗函数。
2、
在板级头文件中include/configs/am335x_evm.h文件中加上宏定义
#define CONFIG_HW_WATCHDOG 1
#define GPIO_WATCHDOG 23
然后在板级文件board/ti/am335x/evm.c中加入喂狗函数hw_watchdog_reset
#ifdef CONFIG_HW_WATCHDOG
#include
void gpio0_23_watchdog(void)
{
enable_gpio0_23_pin_mux();
gpio_request(GPIO_WATCHDOG, “gpio_watchdog”);
gpio_direction_output(GPIO_WATCHDOG,0);
}
void hw_watchdog_reset(void)
{
gpio_set_value(GPIO_WATCHDOG, 1);
gpio_set_value(GPIO_WATCHDOG, 0);
}
#endif
说明:喂狗使用的是GPIO0_23(根据自己的引脚配置修改)
(1)、在board/ti/am335x/mux.c中加上引脚初始化代码
static struct module_pin_mux gpio0_23_pin_mux[] = {
{OFFSET(gpmc_ad9), (MODE(7) | PULLUDEN)}, /* GPIO0_23 */
{-1},
};
void enable_gpio0_23_pin_mux(void)
{
configure_module_pin_mux(gpio0_23_pin_mux);
}
(2)在board/ti/am335x/common_def.h中加上函数声明
extern void enable_gpio0_23_pin_mux(void);
3、
在uboot启动过程中要执行gpio0_23_watchdog();函数
我加在common/main.c中,也可以加在其他地方
我加在arch/arm/lib/board.c中,也可以加在其他地方
void board_init_f(ulong bootflag)
{
bd_t *bd;
init_fnc_t **init_fnc_ptr;
gd_t *id;
ulong addr, addr_sp;
/add gpio0_23 for watchdog by liuc of 2013-1-30/
#ifdef CONFIG_HW_WATCHDOG
gpio0_23_watchdog();
#endif
…
}
4、然后编译,uboot烧写成功后,即可使用,用tftp烧写内核和文件系统是正常的。
问题:
用SD卡烧写文件系统即大文件的时候系统会重启,原因应该是读写SD卡文件的函数没有进行喂狗,
解决办法:
SD卡烧写文件系统时喂狗
在drivers/mmc/omap_hsmmc.c文件中加上头文件
#include
修改函数如下:
static int mmc_read_data(hsmmc_t *mmc_base, char *buf, unsigned int size)
{
………………………………………
while (size) {
/add gpio0_23 for watchdog by liuc of 2013-2-4/
WATCHDOG_RESET();
ulong start = get_timer(0);
do {
mmc_stat = readl(&mmc_base->stat);
if (get_timer(0) - start > MAX_RETRY_MS) {
printf("%s: timedout waiting for status! “,
func);
return TIMEOUT;
}
} while (mmc_stat == 0);
……………………………….
}
static int mmc_write_data(hsmmc_t *mmc_base, const char *buf, unsigned int size)
{
………………………
while (size) {
/add gpio0_23 for watchdog by liuc of 2013-2-4/
WATCHDOG_RESET();
ulong start = get_timer(0);
do {
mmc_stat = readl(&mmc_base->stat);
if (get_timer(0) - start > MAX_RETRY_MS) {
printf(”%s: timedout waiting for status! ",
func);
return TIMEOUT;
}
} while (mmc_stat == 0);
……………………….
}
uboot 看门狗喂狗相关推荐
- 海思Hi3520DV400 uboot看门狗喂狗
看门狗的功能这里不再介绍,自行百度谷歌搜索.这里记录一下Hi3520DV400看门狗的喂狗设置.首先查 include/watchdog.h中的代码,可以发现,如果需要启用硬看门狗,需要定义宏:CON ...
- linux 喂狗时间,看门狗喂狗时间及程序
什么是看门狗定时器 看门狗定时器(WDT,Watch Dog TImer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数.如果程序运行正常,过一段时 ...
- linux需要看门狗喂狗程序,多任务看门狗, 喂狗方法
看门狗分和 软件看门狗.硬件看门狗是利用一个定时器电路,其定时输出连接到电路的复位端,程序在一定时间范围内对定时器清零(俗称"喂狗"),因此程序正常工作时, 定时器总不能溢出,也就 ...
- MSP430G2553 看门狗喂狗问题
MSP430G2553编程用到看门狗,TI官方例程没有看门狗喂狗例程,上网搜了看门狗例程,有两个地方给出的看门狗初始化代码是WDTCTL = WDT_ARST_1000(1秒的看门狗),喂狗程序是WD ...
- Dog Whisper--报告狗班长——狗的心理专家
He talks dogs!他能和狗对话!任何有坏习惯或毛病的狗,都能被他搞定! 他就是 Dog Whisper--Cesar Millan! 以上是国家地理亚洲频道近期经常出现的广告.从5月18号开 ...
- 腾讯与反腾讯联盟两大垄断集团之间的狗咬狗的搞笑互联网大战
文 / 李博(光宇广贞) 腾讯的命掌握在中移动手中,这世界上也只有中移动能要腾讯的命.腾讯所有的联系人资料都无偿转给中移动了.关键看中移动最后是什么态度了. 这是指几年前的一场飞信和QQ的争夺,当时腾 ...
- 创业,不是狗咬狗—leo看赢在中国第三季 3
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址:http://blog.csdn.net/jobchanceleo/archiv ...
- 创业,不是狗咬狗—leo看赢在中国第三季(3)
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址:http://blog.csdn.net/jobchanceleo/archiv ...
- 335x uboot 看门狗喂狗
一.说明: 看门狗,又叫 watchdog timer ,主要用来监控.管理 CPU 的运行状态,并对处于异常状态中的 CPU 进行复位操作,使其能重新工作. 看门狗可分为硬件看门狗和软件看门 ...
最新文章
- java 比较器comparator_Java中比较器的使用Compare和Comparator
- php返回结果判断,老司机在判断返回结果时翻了个身(ThinkPHP)
- 玩转Android之二维码生成与识别
- RAID之中的RAID5的创建及示例
- java中quicksort的参数_Java中的Quicksort
- python win32ui选取文件夹_最全 Python 算法实现资源汇总!
- facelets_不要在facelets中重复表情
- 【iCore3 双核心板】例程三十五:HTTP_IAP_ARM实验——更新升级STM32
- cv图像翻转_涨点技巧!汇集13个Kaggle图像分类项目的性能提升指南
- ARM(AM5728)板移植VSFTPD
- python中key_python属性和key的区别?
- 软件工程学习进度第六周暨暑期学习进度之第六周汇总
- 《Linux高性能服务器编程》——2.7 IPv6头部结构
- 测试一个链表是否为空表 C语言,【链表测试面试题】面试问题:C语言单链表的… - 看准网...
- PASCAL VOC2012数据集介绍与制作自己的数据集
- 干货,AES破解路程-生意参谋举例
- photoshop第九章:文字和场景效果的制作
- 基于shotgun蛋白质组学的MaxQuant质谱计算平台
- 【vue】生成条形码
- SQL sever 查询及格率