Преглед изворни кода

升级导致的看门狗bug

liyi пре 1 година
родитељ
комит
64f2d58a9f
2 измењених фајлова са 22 додато и 12 уклоњено
  1. 2 0
      pro/src/main.c
  2. 20 12
      pro/src/sys.c

+ 2 - 0
pro/src/main.c

@@ -5,6 +5,8 @@
 
 int main(int argc,char* argv[])
 {
+
+    system("echo \"V\" > /dev/watchdog");
     sys_init();
     app_init();
 

+ 20 - 12
pro/src/sys.c

@@ -1405,7 +1405,7 @@ int sys_wdog_feed(void)
 int sys_wdog_en(int flag)
 {
     if(wdog_is_en()) {
-        write(wdog_fd, flag:"1":"0", 1);
+        write(wdog_fd, flag?"1":"0", 1);
     }
     return 0;
 }
@@ -1414,20 +1414,28 @@ int sys_wdog_en(int flag)
 static void sig_handler(int signo)
 {
     printf("sigint_handler, signo: %d\n", signo);
-    wdog_enable(0);
+    sys_wdog_en(0);
 }
+
+static void normal_exit()
+{
+    sys_wdog_en(0);
+}
+
+
 static void sig_init(void)
 {
-    signal(SIGINT,  sig_handler);
-    signal(SIGTERM, sig_handler);
-    signal(SIGKILL, sig_handler);
-    signal(SIGABRT, sig_handler);
-    signal(SIGFPE,  sig_handler);
-    signal(SIGSEGV, sig_handler);
-    signal(SIGILL,  sig_handler);
-    signal(SIGQUIT, sig_handler);
-    signal(SIGHUP,  sig_handler);
-    signal(SIGBUS,  sig_handler);
+    // atexit(normal_exit);
+    // signal(SIGINT,  sig_handler);
+    // signal(SIGTERM, sig_handler);
+    // signal(SIGKILL, sig_handler);
+    // signal(SIGABRT, sig_handler);
+    // signal(SIGFPE,  sig_handler);
+    // signal(SIGSEGV, sig_handler);
+    // signal(SIGILL,  sig_handler);
+    // signal(SIGQUIT, sig_handler);
+    // signal(SIGHUP,  sig_handler);
+    // signal(SIGBUS,  sig_handler);
 }
 
 static void* polling_thread(void *arg)