RK3399 watch dog

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

include <errno.h>

include <fcntl.h>

include <stdlib.h>

include <string.h>

include <unistd.h&gunix怎么读t;

includlinuxe "stdunixio.h"

include <unistd.h> / Sunix的特点ystem V /

include <sys/unixiolinux创建文件ctl.h> / BSD alinux操作系统基础知识nd Linlinux常用命令ux /

include <stropts.h> / XSI STREAMS /

include <linux/watchdunix是系统软件还是应用软件ogunix是什么操作系统.h>

define DEV_NAME "/dev/watchdog"

int fd;

/*

  • @brief 初始化看门狗
  • @param interval 喂狗时间
  • @param margin 喂狗间隔保留时间
  • @return int
  • @create at 2019.09.04 by Eric.unix系统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 intervalunix系统还有人用吗 喂狗时linux系统安装
  • @param fd 看门狗句柄
  • @return int
  • @creatlinux重启命令e 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, chalinux系统r **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");
}

}