在Linux中的看门狗定时器

3

我想在Linux系统中使用计时器中断来实现软件看门狗定时器。如何在Linux中生成计时器中断?

2个回答

8
如果您想使用定时器中断,可以使用信号,特别是 SIGALRM。 您可以使用函数alarm()请求超时。如果您想要使用微秒粒度,可以使用ualarm()。 一旦超时到达,它将调用您之前定义的回调函数。
以下是示例代码:
#include <signal.h>

void watchdog(int sig) 
{
  printf("Pet the dog\r\n");
  /* reset the timer so we get called again in 5 seconds */
  alarm(5);
}


/* start the timer - we want to wake up in 5 seconds */
int main()
{
  /* set up our signal handler to catch SIGALRM */
  signal(SIGALRM, watchdog);
  alarm(5);
  while (true) 
   ;
}

您有几种实现看门狗的选项:

  1. 编写/使用内核驱动程序,它实际上作为看门狗工作,如果未喂养(或被踢),则对设备应用硬复位
  2. 使用watchdog,这是一个有趣的软件看门狗守护进程的实现。

感谢您宝贵的回答。我想要实现精确的毫秒延迟,这有可能吗? - VigneshK

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接