核心開發注意事項

低階核心開發

進行核心開發作業時,不必監控或破壞內容 才會啟用 gfxconsole

如要在 x64 機器上強制啟用將記錄輸出至舊版序列控制台,請傳遞 "kernel.serial=legacy"。如需其他序列設定,請參閱 kernel.serial kernel_cmdline.md 中的說明文件。

如要在圖形控制台出現前啟用早期控制台,請使用 gfxconsole.early cmdline 選項。如要瞭解詳情,請前往 kernel_cmdline.md. 啟用 startup.keep-log-visible 可確保核心記錄維持不變 啟動後 gfxconsole 就會顯示。停用 gfxconsole 您可以透過 driver.<driver name>.disable 停用其繫結的視訊驅動程式庫。 在 Skylake 系統中,上述所有選項的組合看起來會像這樣:

$ tools/build-x86/bootserver build-x86/zircon.bin -- gfxconsole.early driver.intel-i915-display.disable

直接輸出至控制台,而非進行緩衝處理 (在事件時相當實用 核心凍結期間),您可以在建構作業中啟用 ENABLE_KERNEL_LL_DEBUG,如下所示:

fx set ... --args='kernel_extra_defines=["ENABLE_KERNEL_LL_DEBUG"]'

您也可以使用核心 cmdline 參數 kernel.bypass-debuglog 設為 true,系統會強制輸出到控制台,而不是緩衝處理。我們之所以 編譯切換器和 cmdline 參數都是用來協助在核心中使用列印功能 ,強制進入控制台。編譯切換設定 會覆寫 cmdline 參數 (如果兩者同時出現)。請注意, cmdline 參數會產生停用 irq 驅動 uart Tx 的副作用。

變更模組的編譯器最佳化等級

只要在模組中定義,即可覆寫模組的預設 -On 級別 建構引數:

opt_level := <n>

要求反向追蹤

在使用者程序中

為了偵錯,系統當機記錄器可以按照下列方式輸出反向追蹤記錄: 請求。您需要修改來源,但在未設定來源時 偵錯工具或是一般內建偵錯機制,這可能非常實用

#include "src/lib/debug/backtrace-request.h"

void my_function() {
  backtrace_request_all_threads();
}

呼叫 backtrace\_request 時, 偵錯工具用於中斷點處理的例外狀況。 如果沒有附加偵錯工具,則系統當機記錄器會 處理例外狀況、輸出回溯追蹤記錄,然後繼續執行緒。

從核心執行緒

#include <kernel/thread.h>

void my_function() {
  thread_print_backtrace(get_current_thread(), __GET_FRAME(0));
}

在啟動期間匯出偵錯資料

如要在早期啟動階段順利測試系統, 資料檔案從核心轉移到 /boot 檔案系統如何匯出資料檔案: 建立 VMO 並建立名稱,然後將該 VM 傳送給具有類型 handle_info 的使用者啟動程序 PA_VMO_DEBUG_FILE (與引數 0)。接著,使用者啟動程序會自動將 而 devmgr 會將 VMO 匯出為路徑

/boot/kernel/<name-of-vmo>

熵收集器品質測試會使用這個機制進行匯出 相當大 (約 1 Mbit) 檔案,且充滿隨機資料。