工具/软件:Linux
您好、香榭丽舍
客户使用了 dm8168+dvrrdk4.0.0.3、他希望 通过看门狗重置整个芯片、包括 A8+DSP+M3、但他没有重新路由 WD_OUT 引脚、他使用了软件看门狗。
他进行了以下测试:
如果时间<10s、系统将不会复位。
/sawatchdog 15,如果时间大于10s,系统将复位。
但我无法使用 Ctrl+c 或 killall sawatchdog 重置系统。
下面是测试代码。
intfd; voidcatch_int(intsignum) { signal(SIGINT, catch_int); printf("In signal handler\n"); if(0 != close(fd)) printf("Close failed in signal handler\n"); else printf("Close succeeded in signal handler\n"); } intmain(intargc, constchar*argv[]) { intsleep_time = atoi(argv[1]); intdata = 0; intret_val; //signal(SIGINT, catch_int); fd=open("/dev/watchdog",O_WRONLY); if(fd==-1) { perror("watchdog"); return1; } ret_val = ioctl (fd, WDIOC_GETTIMEOUT, &data); if(ret_val) { printf("\nWatchdog Timer : WDIOC_GETTIMEOUT failed"); } else{ printf("\nCurrent timeout value is : %d seconds\n", data); } data = 10; ret_val = ioctl (fd, WDIOC_SETTIMEOUT, &data); if(ret_val) { printf("\nWatchdog Timer : WDIOC_SETTIMEOUT failed"); } else{ printf("\nNew timeout value is : %d seconds", data); } ret_val = ioctl (fd, WDIOC_GETTIMEOUT, &data); if(ret_val) { printf("\nWatchdog Timer : WDIOC_GETTIMEOUT failed"); } else{ printf("\nCurrent timeout value is : %d seconds\n", data); } while(1) { if(1 != write(fd, "\0", 1)) { printf("Write failed\n"); break; } else printf("Write succeeded\n"); sleep(sleep_time); } if(0 != close (fd)) printf("Close failed\n"); else printf("Close succeeded\n"); return0; }
Thanks.
Rgds
Shine
