介绍
架构
看门狗驱动遵循 Linux 的看门狗核心和看门狗设备系统。看门狗设备系统为用户空间提供看门狗接口。 看门狗软件架构如下图所示。
备注
Linux 系统的硬件看门狗设备是 watchdog 4。
有关 linux 看门狗的更多细节请参考 watchdog v5.4 或 watchdog 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 |
编译配置
选择
:
APIs
用户空间 API
用户空间的看门狗接口由 <linux>/drivers/watchdog/watchdog_dev.c
提供。以下是一些常用的 API:
接口 |
介绍 |
---|---|
watchdog_open |
打开一个看门狗设备 |
watchdog_write |
ping这个看门狗 |
watchdog_ioctl |
配置看门狗参数。同时也可以ping看门狗 |
参考 watchdog api v5.4 或 watchdog api v6.6 获取更多 API 信息。
用户空间的看门狗演示位于 <test>/watchdog
。有关详细信息,请阅读该目录下的 readme.txt
。
内核空间 API
无。