介绍

架构

看门狗驱动遵循 Linux 的看门狗核心和看门狗设备系统。看门狗设备系统为用户空间提供看门狗接口。 看门狗软件架构如下图所示。

../../rst_linux/8_wdg/figures/watchdog_software_arch.svg

备注

Linux 系统的硬件看门狗设备是 watchdog 4。

有关 linux 看门狗的更多细节请参考 watchdog v5.4watchdog v6.6

实现

看门狗驱动的实现涉及以下文件:

驱动程序位置

介绍

<linux>/drivers/rtkdrivers/watchdog/Kconfig

看门狗驱动程序 Kconfig

<linux>/drivers/rtkdrivers/watchdog/Makefile

看门狗驱动程序 Makefile

<linux>/drivers/rtkdrivers/watchdog/realtek-wdg.c

看门狗驱动程序代码

配置

设备树配置

看门狗设备树节点:

watchdog: wdg@410004C0 {
   compatible = "realtek,ameba-watchdog";
   reg = <0x410004C0 0x000010>;
   interrupts = <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>;
   rtk,wdg-index = <4>;
   rtk,wdg-timeout = <30>; // seconds
   rtk,wdg-max-timeout-ms = <0xFFFF>; // 1~0xFFFF
   rtk,wdg-window-protection-ms = <0xFFFF>; // 0xFFFF means disabled, usually: disabled.
   rtk,wdg-int-trigger-threshold-ms = <50>;
   rtk,wdg-interrupt-mode = <1>;
};

看门狗的设备树配置如下所列:

属性

描述

可配置?

compatible

看门狗驱动程序的描述符。默认值: “realtek,ameba-watchdog”

reg

看门狗设备的硬件地址和大小。 默认值: <0x410004C0 0x000010>

interrupts

看门狗设备的GIC编号。 默认值 <GIC_SPI 62 IRQ_TYPE_LEVEL_HIGH>

rtk,wdg-index

Realtek 看门狗索引。默认值:<4>,用于 CA32 的非安全看门狗定时器

rtk,wdg-timeout

看门狗超时时间,单位秒

1~65

rtk,wdg-max-timeout-ms

看门狗最大超时时间(单位毫秒),受限于硬件

1~0xFFFF

rtk,wdg-window-protection-ms

0xFFFF 表示看门狗窗口保护被禁用。如果设置为0到0xFFFE之间的值,这意味着在看门狗窗口n期间,此看门狗无法被刷新。通常情况下,窗口是禁用的

0~0xFFFF

rtk,wdg-interrupt-mode

当看门狗在超时时间减去中断触发阈值(wdg-int-trigger-threshold-ms)期间未被刷新时,为CPU生成一个中断。默认设置:开启中断模式

0/1

rtk,wdg-int-trigger-threshold-ms

如果启用了中断模式,这是看门狗超时前,硬件向CPU发出中断的阈值。默认值:50毫秒

0~0xFFFF

编译配置

选择 Device Drivers > Drivers for Realtek > Watchdog driver

../../rst_linux/8_wdg/figures/watchdog_driver.png

APIs

用户空间 API

用户空间的看门狗接口由 <linux>/drivers/watchdog/watchdog_dev.c 提供。以下是一些常用的 API:

接口

介绍

watchdog_open

打开一个看门狗设备

watchdog_write

ping这个看门狗

watchdog_ioctl

配置看门狗参数。同时也可以ping看门狗

参考 watchdog api v5.4watchdog api v6.6 获取更多 API 信息。

用户空间的看门狗演示位于 <test>/watchdog。有关详细信息,请阅读该目录下的 readme.txt

内核空间 API

无。