通过WDIOC_KEEPALIVE指令喂狗,使用方式如下: ioctl(int fd, WDIOC_KEEPALIVE, NULL); 看门狗应用编程实战 这个函数就比较简单,只有一个main函数。 首先定义watchdog_info结构体变量info,然后open打开看门狗设备文件,打开后先通过WDIOS_DISABLECARD,使用ioctl的WDIOC_SETOPTIONS配置看门狗计时器停止,然后ioctl调用WDIOC_SET...
#define WDIOC_GETSTATUS _IOR(WATCHDOG_IOCTL_BASE, 1, int) #define WDIOC_GETBOOTSTATUS _IOR(WATCHDOG_IOCTL_BASE, 2, int) #define WDIOC_GETTEMP _IOR(WATCHDOG_IOCTL_BASE, 3, int) #define WDIOC_SETOPTIONS _IOR(WATCHDOG_IOCTL_BASE, 4, int) #define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_...
而应用软件可以设置喂狗时间范围为 1s ~ 65535s,驱动默认为 60s,如果应用软件没有在所设置的时间内调用 WDIOC_KEEPALIVE 进行喂狗(如60s) ,那么驱动程序就会停止给硬件喂狗,从而让硬件看门狗芯片产生复位信号,也就是说在 60s 内,驱动还是会通过定时器给硬件看门狗芯片继续喂狗,超过 60s 后,应用没有喂狗,那么定...
->WDIOC_KEEPALIVE--调用watchdog_ping()喂狗。 ->WDIOC_SETTIMEOUT--设置timeout。 ->WDIOC_GETTIMEOUT--获取timeout值。 ->WDIOC_SETPRETIMEOUT--设置pretimeout。 ->WDIOC_GETPRETIMEOUT--获取pretimeout。 ->WDIOC_GETTIMELEFT--获取到reboot的剩余时间。 watchdog_write()是对watchdog进行喂狗接口: ...
* 1000;//喂狗时间设置 us 微秒、在超时时间到来前 100ms 喂狗for ( ; ; ) {usleep(time);ioctl(fd, WDIOC_KEEPALIVE, NULL);}} 总结:1、实例的代码很简单,利用参数传进来相应的超时时间,需要传入一个参数作为看门狗超时时间。2、Linux系统下都会有常用硬件的驱动节点,直接调用即可控制硬件。
所有的驱动都有一个ioctl接口支持至少一个ioctl命令,KEEPALIVE。这个 ioctl 做的事和一个写watchdog设备完全一样,所以,上面程序的主循环可以替换为: while (1) { ioctl(fd, WDIOC_KEEPALIVE, 0); sleep(10); } ioctl的参数被忽略。 设置和获得超时值: ...
WDIOC_KEEPALIVE 、 WDIOC_SETTIMEOUT 、 WDIOC_GETTIMEOUT ,说明如下: 具体步骤 操作一 打开设备 首先在调用 ioctl() 函数之前,需要先打开看门狗设备得到文件描述符,如下所示: int fd; fd = open("/dev/watchdog", "O_RDWR"); if (0 > fd) ...
("Watchdog timeout set to %d seconds ", timeout); // 循环喂狗,保持系统不被复位 while (1) { printf("Feeding the watchdog... "); ret = ioctl(fd, WDIOC_KEEPALIVE, NULL); // 使用WDIOC_KEEPALIVE喂狗 if (ret == -1) { perror("Cannot feed the watchdog"); break; } sleep(time...
或者ioctl调用, while(1){ioctl(fd,WDIOC_KEEPALIVE,0);sleep(10);} 设置重启时间, inttimeout;timeout=15;ioctl(fd,WDIOC_SETTIMEOUT,&timeout);//设置超时printf("The timeout was set to %d seconds\n",timeout); 脚本控制 喂狗与关闭,不加-n好像也行。
#define WDIOC_KEEPALIVE _IOR(WATCHDOG_IOCTL_BASE, 5, int) #define WDIOC_SETTIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 6, int) #define WDIOC_GETTIMEOUT _IOR(WATCHDOG_IOCTL_BASE, 7, int) #define WDIOC_SETPRETIMEOUT _IOWR(WATCHDOG_IOCTL_BASE, 8, int) ...