Linux

啟用 BeagleBone Black 的看門狗定時器,即使作業系統無法啟動也能正常工作

  • September 18, 2016

我們知道,通過打開/dev/watchdog看門狗啟動並在不到一分鐘的時間內發送一個字元,它將重置。說明在這裡

用於 BBB AM335x的處理器預設啟用其內部看門狗。但是當 U-Boot 或 Ubuntu 啟動時,這個看門狗會被禁用。作業系統啟動後就/dev/watchdog可以使用了。

我想確保即使 U-Boot 或核心無法啟動,看門狗也能正常工作。那麼怎麼做呢?

  • 核心和 U-Boot 不應禁用看門狗定時器。
  • 看門狗的預設超時時間應該在 U-Boot 啟動核心前一分鐘以上,這樣作業系統才能完全啟動

我需要提一下,更改 U-Boot 程式碼或 Linux 核心程式碼的某些部分是可以接受的。但外部看門狗不是一種選擇。

經過調查,我發現linux核心在啟動時並沒有禁用看門狗,但它實際上使用了一個計時器來重置看門狗。並且當核心出現 oops 或恐慌時,它仍在重置看門狗,因此系統不會因看門狗定時器溢出而重新啟動。

按照這個問題答案來自:man proc

/proc/sys/核心/恐慌

該文件提供對核心變數panic_timeout 的讀/寫訪問權限。如果這是零,核心將在恐慌中循環;如果非零,則表示核心應在此秒數後自動重啟

很明顯,應該將一個非零值傳遞給該文件。根據這個答案,要傳遞一個值,/proc/sys/kernel/panic我們應該修改/etc/sysctl.conf並添加參數kernel.panic = 3,等待 3 秒,然後在發生核心恐慌後重新啟動。

但這並沒有解決我的問題。通過調查其他與恐慌相關的問題,我發現man proc

/proc/sys/kernel/panic_on_oops(自 Linux 2.5.68 起)

當遇到 oops 或 BUG 時,此文件控制核心的行為。如果此文件包含 0,則係統會嘗試繼續操作。如果它包含 1,那麼系統會延遲幾秒鐘(給 klogd 時間來記錄 oops 輸出)然後出現恐慌。如果 /proc/sys/kernel/panic 文件也非零,則機器將重新啟動。

我的問題不是恐慌,而是核心糟糕!因此,通過添加,kernel.panic_on_oops = 1標誌更改為 1。現在每當核心停止時,它會在 3 秒後重新啟動。/etc/sysctl.conf``/proc/sys/kernel/panic_on_oops

引用自:https://unix.stackexchange.com/questions/309435