2014-11-21 34 views
1

在應用程序啓動時,在使用sitara AM3359上的BSP linux 3.2的嵌入式系統中,我想檢測導致上次重新啓動的原因並將此狀態保存在兩個計數器:看門狗復位和上電覆位。PhyCORE-AM335x-PD13.1.2 Linux上的最後一次重新啓動檢測3.2

  1. 通常在MCU,我在RAM保留現場測試看門狗,寫在第一次啓動特殊鍵和使用看門狗復位。如果沒有,那麼當重新啓動它的電源時,如果它在那裏它是一個看門狗重置。

    我的第一個問題是,如何將關鍵變量保存在RAM上,以便在重新啓動或看門狗復位後倖存下來?

    這似乎是一些乾淨的啓動RAM ...我可以禁用嗎?

  2. 通常有一個註冊該信息。在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); 
    } 
    
  3. 是否有另一種方式來獲得該信息(MMAP,寫驅動程序,SYS等)?

回答

1

我開始通過使用終端命令devmem 0x44E00F08(busybox)來查看是否讀取物理內存將工作,然後我使用mmap()來讀取PRM_RSTST寄存器,並知道最後一次復位是否看門狗復位。

1

我建議你用你的bootloader看到處理器寄存器的值(u-boot的我beleive命令是reginfo)。用於存儲看門狗密鑰的內存的相同方式(但另一個命令)。一旦使用引導加載程序進行調試,就可以考慮將它們傳遞給內核。

+0

感謝您的回答。我可能必須這樣做才能在啓動時測試看門狗。 – Phil 2014-11-25 13:50:32

相關問題