Edit online

设计说明

26 Nov 2024
Read time: 1 minute(s)

源代码位于 drivers/watchdog/artinchip_wdt.c

Linux 提供了一个 Watchdog 子系统(简称 Watchdog Core),使得在用户空间可以通过 /dev/watchdogX 来访问 Watchdog 控制器。为了更方便查看硬件状态和参数设置,本驱动另外扩展了几个 sysfs 节点。

整个软件框架可以简单抽象为下图:


sw_system23

1. Linux Watchdog 子系统架构图

针对我们 Watchdog 控制器的几个特色功能:

  1. 多通道

    将每个通道注册为一个 watchdog 设备,在/dev/目录下面生成多个 watchdog 设备节点。每一个 Watchdog 设备节点都提供标准的 Watchdog ioctl 接口。

  2. 超时中断

    在 Watchdog 超时之前可以产生一些中断信号,让软件有机会做一些预处理。对应到 Core 的 pretimeout 参数,可以支持对外注册 pretimeout 回调的机制。

  3. 清零窗口

    Watchdog Core 中没有对应的参数,所以提供一个 int 类型的 DTS 字段“clr_thd”,让用户态可以设置此门限,需要注意这个值是 4 个 Watchdog 通道共用的。默认是 0,表示随时可以 clean 计数。详见 Watchdog 自定义参数

  4. 调试模式的计数状态

    当 CPU 进入 Jtag 的 debug 状态时,Watchdog 计数可以选择是否暂停。类似的,也通过一个 bool 类型的 DTS 字段 “dbg_continue” 提供给用户态去设置。默认是暂停。详见 Watchdog 自定义参数