Skip to content

# 7.2.3. 开发指南

## 7.2.3.1. 设备树

在设备树中增加看门狗的硬件信息描述

    watchdog0: wdt@30100000 {
            status = "okay";
            compatible = "snps,hb_wdt";
            reg = <0x0 0x30100000 0x0 0x1000>;
            interrupt-parent = <&gic>;
            interrupts = <GIC_SPI CPUSYS_CLUSTER_MP4_WWDT_WDT_INTR_0 IRQ_TYPE_LEVEL_HIGH>, //watchdog window interrupt
            <GIC_SPI CPUSYS_CLUSTER_MP4_WWDT_SYS_RST_INTR_0 IRQ_TYPE_EDGE_RISING>; //watchdog timeout interrupt
            resets = <&smc_reset RST_IDX_IP_CPU0_WWDT_PAUSE0>, //pause
                                    <&smc_reset RST_IDX_IP_CPU0_WWDT_0>;  //reset
            clocks = <&scmi_clk CLK_IDX_TOP_CPU0_TIMER_WDT>;  //clock
            snps,mode = "sw";
            usage = "default";
            timeout = <20648>;
            moduleid-ofst = <4>;
            regmap-reg = <&cpu_mp4_sys_reg>;
    };

## 7.2.3.2. 编译选项

    #
    # WDT Config
    #
    CONFIG_HB_WATCHDOG=y   //J6X Watchdog总编译选项
    CONFIG_HB_WATCHDOG_MODULE=m //J6X Watchdog是否编译成模块,m为模块，y为built-in
    CONFIG_HB_DW_WATCHDOG=y //Watchdog是否为DW_WATCHDOG，J6X Watchdog均为DW_WATCHDOG
    CONFIG_HB_WATCHDOG_MON=y     //J6X监控功能
    CONFIG_HB_WATCHDOG_IRQ_MON=y //J6X IRQ监控功能
    CONFIG_HB_WATCHDOG_KTHREAD_MON=y //J6X kthread监控功能

## 7.2.3.3. 用户开发

目前WDT1用于监控内核关中断超时，WDT2用于监控内核线程，其余WDT0、WDT3、WDT4和WDT5均支持在用户态通过ioctl接口对Watchdog进行操作，使用方式如下。 首先需要引用头文件：

    #include "hb_wdt_ioctl.h"

### 7.2.3.3.1. HB_WDT_START

    int flags = 0;
    ret = ioctl(fd, HB_WDT_START, &flags);

【功能描述】

> 开启看门狗

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_START：WDT START的ioctl宏

- [OUT] flags：标记信息

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.2. HB_WDT_RESTART

    int flags = 0;
    ret = ioctl(fd, HB_WDT_RESTART, &flags);

【功能描述】

> 对看门狗进行喂狗操作

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_RESTART：WDT RESTART的ioctl宏

- [OUT] flags：标记信息

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.3. HB_WDT_PAUSE

    int flags = 0;
    ret = ioctl(fd, HB_WDT_PAUSE, &flags);

【功能描述】

> 暂停看门狗

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_PAUSE：WDT PAUSE的ioctl宏

- [OUT] flags：标记信息

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.4. HB_WDT_PROCEED

    int flags = 0;
    ret = ioctl(fd, HB_WDT_PROCEED, &flags);

【功能描述】

> 在暂停看门狗后使看门狗继续运行

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_PROCEED：WDT PROCEED的ioctl宏

- [OUT] flags：标记信息

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.5. HB_WDT_SETTIMEOUT

    int flags = 50;//50表示要设置的timeout值，单位为ms
    ret = ioctl(fd, HB_WDT_SETTIMEOUT, &flags);

【功能描述】

> 设置看门狗的超时时间，单位为ms

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_SETTIMEOUT：WDT SETTIMEOUT的ioctl宏

- [IN] flags：设置的timeout值，单位为ms

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.6. HB_WDT_GETTIMEOUT

    int flags = 0;
    ret = ioctl(fd, HB_WDT_GETTIMEOUT, &flags);

【功能描述】

> 获取看门狗的超时时间，单位为ms

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_GETTIMEOUT：WDT GETTIMEOUT的ioctl宏

- [OUT] flags：获取的看门狗的超时时间，单位为ms

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.7. HB_WDT_GETTIMELEFT

    int flags = 0;
    ret = ioctl(fd, HB_WDT_GETTIMELEFT, &flags);

【功能描述】

> 获取看门狗的本次喂狗周期的剩余超时时间，单位为ms

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_GETTIMELEFT：WDT GETTIMELEFT的ioctl宏

- [OUT] flags：获取的看门狗的本次喂狗周期的剩余超时时间，单位为ms

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.8. HB_WDT_SETMODE

    int flags = 34;//34表示要设置的看门狗的模式，34表示有第一次timeout中断的窗口狗模式，2表示没有第一次timeout中断的窗口狗模式，0表示普通狗模式
    ret = ioctl(fd, HB_WDT_SETMODE, &flags);

【功能描述】

设置看门狗的模式

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_SETMODE：WDT SETMODE的ioctl宏

- [IN] flags：要设置的看门狗的模式

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.9. HB_WDT_GETMODE

    int flags = 0;
    ret = ioctl(fd, HB_WDT_GETMODE, &flags);

【功能描述】

> 获取看门狗的模式

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_GETMODE：WDT GETMODE的ioctl宏

- [OUT] flags： 获取的看门狗的模式

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X

### 7.2.3.3.10. HB_WDT_GETSTATUS

    int flags = 0;
    ret = ioctl(fd, HB_WDT_GETSTATUS, &flags);

【功能描述】

> 获取看门狗状态

【参数描述】

- [IN] fd：WDT文件描述符

- [IN] HB_WDT_GETSTATUS：WDT GETSTATUS的ioctl宏

- [OUT] flags：获取的看门狗的状态

【返回值】

- 0: 成功

- 小于0: 失败

【兼容性】

> 硬件：J6X