linux嵌入式系统中如何更改看门狗定时器

linux嵌入式系统中如何更改看门狗定时器,linux,arm,embedded-linux,watchdog,Linux,Arm,Embedded Linux,Watchdog,我必须使用linux看门狗驱动程序(/dev/watchdog)。很好,我写了一个这样的角色: echo 1 > /dev/watchdog 看门狗启动,大约1分钟后,系统重新启动 问题是,如何更改超时?我必须更改驱动程序中的时间间隔?请阅读。从用户空间更改超时的标准方法是使用ioctl() 每个看门狗设备可能都有硬件支持的上限(可能还有下限),因此不能将超时设置为任意高。因此,设置超时后,最好读回超时 ioctl(fd, WDIOC_GETTIMEOUT, &timeout)

我必须使用linux看门狗驱动程序(/dev/watchdog)。很好,我写了一个这样的角色:

 echo 1 > /dev/watchdog
看门狗启动,大约1分钟后,系统重新启动

问题是,如何更改超时?我必须更改驱动程序中的时间间隔?

请阅读。从用户空间更改超时的标准方法是使用
ioctl()

每个看门狗设备可能都有硬件支持的上限(可能还有下限),因此不能将超时设置为任意高。因此,设置超时后,最好读回超时

ioctl(fd, WDIOC_GETTIMEOUT, &timeout);   /* Update timeout with driver value. */
现在,重读超时可以用作踢频

assert(timeout > 2);
while (1) {
  ioctl(fd, WDIOC_KEEPALIVE, 0);
  sleep(timeout-2);
}
您可以在脚本/shell命令中编写自己的踢腿例程

    while [ 1 ] ; do sleep 1; echo V > /dev/watchdog; done
然而,通常使用该程序。这应该考虑到所有深奥的特性。您可以
nice
将用户空间程序设置为最低优先级,然后如果用户空间挂起,系统将重置BusyBox包含一个看门狗小程序

每个看门狗驱动程序都有并且大多数都包括一个设置超时的机制;使用内核命令行或模块参数设置机制。但是,如果您不了解看门狗硬件的具体知识,则infra structure
ioctl
timeout更便于携带。
ioctl
可能更适合未来,因为您的硬件可能会发生变化


示例用户空间代码包含在。

大多数看门狗驱动程序将超时间隔作为模块参数。在插入看门狗驱动程序时更改它,或者您可以使用ioclts(如果实现)更改超时值。为此,您需要编写一个简单的c程序。对于具体的答案,请提供您的看门狗驱动程序的名称。请在lsmod
lsmod
中查看。谢谢您的回答!不幸的是,当我键入lsmod时,它没有显示任何内容查看内部
/sys/devices/platform
。对于tegra看门狗设备,我得到
/sys/devices/platform/tegra\u wdt/
目录。从中可以识别映射到该设备的驱动程序。某些看门狗设备不支持修改超时。在这些情况下,内核将尝试通过触发计时器中断来扩展它。但这种情况有点不同,因为ISR锁定的阈值比进程小。主要的一点是,超时是一个重载的概念。不同的子系统通常有不同的延迟要求。高优先级软调制解调器任务阻塞2秒是否正常?GUI任务可以阻止2秒吗?低优先级磁盘碎片整理可以阻止2秒吗?我使用WDIOC_SETTIMEOUT标志,但是。我无法设置看门狗的超时时间。ioctl(fd、WDIOC_SETTIMEOUT和timeout)的输出为非零。所以默认情况下设置了10秒的超时时间。很可能。正如我所说,某些硬件不支持更改超时。有时,引导加载程序可能已经激活了看门狗,并且没有办法取消激活或更改超时;但这是特定于硬件的。您是否有Linux版本并知道看门狗设备的名称?您可以通过更新驱动程序以使用工作队列等方式延长超时时间,这将比固定频率更快地触发看门狗。
    while [ 1 ] ; do sleep 1; echo V > /dev/watchdog; done