RK3399 watch dog

简介: RK3399 watch dog

[点击并拖拽以移动]

内核选中红框部分,确保有/dev/watchdog

include <errno.h>

include <fcntl.h>

include <stdlib.h>

include <string.h>

include <unistd.h>

include "stdio.h"

include <unistd.h> / System V /

include <sys/ioctl.h> / BSD and Linux /

include <stropts.h> / XSI STREAMS /

include <linux/watchdog.h>

define DEV_NAME "/dev/watchdog"

int fd;

/*

  • @brief 初始化看门狗
  • @param interval 喂狗时间
  • @param margin 喂狗间隔保留时间
  • @return int
  • @create at 2019.09.04 by Eric.Xi

*/
int watch_dog_init(int interval,int margin)
{

 printf("started (interval %d, margin %d)!\n", interval, margin);

fd = open(DEV_NAME, O_RDWR|O_CLOEXEC);
if (fd == -1) {
    printf("Failed to open %s: %s\n", DEV_NAME, strerror(errno));
    return 1;
}

int timeout = interval + margin;
int ret = ioctl(fd, WDIOC_SETTIMEOUT, &timeout);
if (ret) {
    printf("Failed to set timeout to %d: %s\n", timeout, strerror(errno));
    ret = ioctl(fd, WDIOC_GETTIMEOUT, &timeout);
    if (ret) {
        printf("Failed to get timeout: %s\n", strerror(errno));
    } else {
        if (timeout > margin) {
            interval = timeout - margin;
        } else {
            interval = 1;
        }
        printf("Adjusted interval to timeout returned by driver:"
                " timeout %d, interval %d, margin %d\n",
                timeout, interval, margin);
    }
}
return 0;

}

/*

  • @brief 喂看门狗
  • @param interval 喂狗时间
  • @param fd 看门狗句柄
  • @return int
  • @create at 2019.09.04 by Eric.Xi

*/
int watch_dog_feed(int fd, int interval)
{

write(fd, "", 1);
sleep(interval);
return 0;

}

/*

  • @brief 看门狗使用demo
  • @return int
  • @create at 2019.09.04 by Eric.Xi

*/
int main(int argc, char **argv)
{

int interval = 1;
int margin =2;
int ret;
ret = watch_dog_init(interval,margin);
if(ret<0){
    return -1;
}


    while (true) {
        watch_dog_feed(fd ,interval);
     printf("------feed--------\n");
    
    }

}

相关文章
|
前端开发
|
JavaScript
一步一步实现call和apply方法,超简单!
前言 this 指向问题一直是一个老生常谈的问题了!我们对它可以说是又爱又恨,因为 this 指向常常没有按照我们的想法去指向谁,导致程序无缘出现许多 bug。所以我们常常直接强制改变程序中的 this 指向,我们常用的方法有 bind、apply 和 call,bind 与其它两个稍许不同,所以我们本篇文章专门讲解 call 和 apply 方法,并且手动模拟实现它们。
176 0
一步一步实现call和apply方法,超简单!
|
分布式计算 Kubernetes Spark
【k8s系列1】spark on k8s 与 spark on k8s operator的对比
【k8s系列1】spark on k8s 与 spark on k8s operator的对比
534 0
【k8s系列1】spark on k8s 与 spark on k8s operator的对比
|
Unix Linux
RK3399 watch dog
RK3399 watch dog
264 0
|
分布式计算 Spark 容器
Spark Operator浅析
Spark Operator浅析 本文介绍Spark Operator的设计和实现相关的内容. Spark运行时架构 经过近几年的高速发展,分布式计算框架的架构逐渐趋同. 资源管理模块作为其中最通用的模块逐渐与框架解耦,独立成通用的组件.
|
JavaScript
call,apply,方法的使用
//apply和call的使用方法 /* * apply的使用语法 * 函数名字.apply(对象,[参数1,参数2,...]); * 方法名字.apply(对象,[参数1,参数2,.
1004 0
|
分布式计算 Spark 容器
Spark in action on Kubernetes - Spark Operator的原理解析
作者 | 阿里云智能事业群技术专家 莫源 [](https://www.atatech.org/articles/136659#1)Spark Operator的内部实现 在深入解析Spark Operator之前,我们先补充一些关于kubernetes operator的知识。
1875 0
|
分布式计算 Java API
Spark 2.4.0编程指南--spark dataSet action
## 技能标签 - Spark session 创建 - 在Spark 2.0之后,RDD被数据集(Dataset)取代 ,保留RDD旧api - 数据集数据集介绍 - 读取本地文件(txt,json),HDFS文件 - 对txt格式文件数据遍历(行数据转成对象) - 对json格式文件...
1623 0