在應用程序啓動時,在使用sitara AM3359上的BSP linux 3.2的嵌入式系統中,我想檢測導致上次重新啓動的原因並將此狀態保存在兩個計數器:看門狗復位和上電覆位。PhyCORE-AM335x-PD13.1.2 Linux上的最後一次重新啓動檢測3.2
通常在MCU,我在RAM保留現場測試看門狗,寫在第一次啓動特殊鍵和使用看門狗復位。如果沒有,那麼當重新啓動它的電源時,如果它在那裏它是一個看門狗重置。
我的第一個問題是,如何將關鍵變量保存在RAM上,以便在重新啓動或看門狗復位後倖存下來?
這似乎是一些乾淨的啓動RAM ...我可以禁用嗎?
通常有一個註冊該信息。在AM335x中,PRM_RSTST寄存器的位(WDT1_RST),我使用帶有WDIOC_GETBOOTSTATUS的ioctl()來檢查最後一次啓動是由看門狗引起還是上電覆位。這個電話不會讓我回到我能理解的東西。有人可以解釋嗎?我怎樣才能得到這個寄存器...
Power ON: test1: 1076092848 test2: 1076113328 test3: 1075589040 test4: 1076203440 watchdog: test5: 1076481968 test6: 1075732400 test7: 1075965872
代碼使用:
/* Check if last boot is caused by watchdog */ if (ioctl(fd, WDIOC_GETBOOTSTATUS, &bootstatus) == 0) { fprintf(stdout, "Last boot is caused by : %s, bootstatus= %d\n", (bootstatus != 0) ? "Watchdog" : "Power-On-Reset", bootstatus); } else { fprintf(stderr, "Error: Cannot read watchdog status\n"); exit(EXIT_FAILURE); }
是否有另一種方式來獲得該信息(MMAP,寫驅動程序,SYS等)?
感謝您的回答。我可能必須這樣做才能在啓動時測試看門狗。 – Phil 2014-11-25 13:50:32