linux内核看门狗关闭方法,m3352linux内核中看门狗喂狗和应用层喂狗方法

本文介绍了Linux内核模块和应用层如何对看门狗进行喂狗操作以及关闭方法。在内核模块中,通过初始化定时器实现周期性喂狗。而在应用层,可以通过向/dev/watchdog设备文件写入特定字符来喂狗或关闭看门狗。同时提供了设置和获取超时时间的方法。此外,展示了驱动程序代码,用于管理TI OMAP系列的看门狗定时器。
摘要由CSDN通过智能技术生成

1、linux内核模块喂狗方法:

#include

#include

#include

#include

#include

#include

#include

#include

#include

struct timer_list epc_watchdog;

void epc_feed_wdt(void)

{

gpio_direction_output(65, 0);

ndelay(2);

gpio_direction_output(65, 1);

}

EXPORT_SYMBOL(epc_feed_wdt);

static void epc_watchdog_timeout(unsigned long arg)

{

//printk("timer out!\n");

epc_feed_wdt();

mod_timer(&epc_watchdog, jiffies + 1*HZ/4);

}

static int epc_timer_init(void)

{

epc_feed_wdt();

printk("wdt feed timer start!!\n");

init_timer(&epc_watchdog);

epc_watchdog.function = &epc_watchdog_timeout;

epc_watchdog.expires = jiffies + 1*HZ/4;

add_timer(&epc_watchdog);

epc_feed_wdt();

return 0;

}

//static void epc_timer_exit(void)

//{

//printk(KERN_ALERT "Goodbye, cruel world\n");

//}

subsys_initcall(epc_timer_init);

//module_init(epc_timer_init);

//module_exit(epc_timer_exit);

MODULE_LICENSE("Dual BSD/GPL");

2、应用层喂狗方法:

M335x-T/A3352-T工控主板有一个可编程看门狗(/dev/watchdog),可用于监测应用程序的运行状况。看门狗有如下特点:

(1)默认超时时间为19秒,超时时间可设置(1~60秒);

(2)先向看门狗发送一个字符“V”后,可关闭看门狗。

设置看门狗时间

看门狗默认超时时间为19秒,用户可以将超时时间设置为需要的值,通过ioctl实现,具体命令为:WDIOC_SETTIMEOUT,需要一个参数,即超时时间。使用示例:

int timeout = 10;

ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout);

获取超时时间

通过ioctl以及WDIOC_GETTIMEOUT命令,可以获得看门狗的超时时间。使用示例:

timeout = 0;

ioctl(wdt_fd, WDIOC_GETTIMEOUT, &timeout);

printf("The timeout is %d seconds\n", timeout);

喂狗操作

看门狗被打开后,必须在超时时间内进行喂狗,最简单的喂狗办法就是向看门狗写一个字符(特殊字符除外)。

关闭看门狗

需先写入“V”,然后使用close关闭看门狗。使用示例:

write(wdt_fd, "V", 1);

close(wdt_fd);

范例

程序清单1 是一个非常简单的范例。打开看门狗后,将看门狗超时设置为10秒钟,然后在超时时间内周期性喂狗。运行该程序,系统不会复位。如果调整喂狗周期大于10秒,程序将会引起系统复位。

程序清单1  看门狗用法简单范例

#include

#include

#include

#include

#include

#include

#define WDT "/dev/watchdog"

int main(void)

{

int wdt_fd = -1;

int timeout;

wdt_fd = open(WDT, O_WRONLY);

if (wdt_fd == -1) {

printf("fail to open "WDT "!\n");

}

printf(WDT " is opened!\n");

timeout = 10;

ioctl(wdt_fd, WDIOC_SETTIMEOUT, &timeout);

ioctl(wdt_fd, WDIOC_GETTIMEOUT, &timeout);

printf("The timeout was is %d seconds\n", timeout);

#if 1 // 循环喂狗

while(1) {

write(wdt_fd, "\0", 1);

sleep(9); // 喂狗时间为9秒,小于设定的10秒;如果喂// 狗时间大于超时时间,将会发生看门狗复位

}

#else // 关闭看门狗

write(wdt_fd, "V", 1);

close(wdt_fd);

printf( WDT " is cl

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值