zx_debug_suspend

摘要

暫停存取偵錯序列埠硬體。

宣告

#include <zircon/syscalls-next.h>

zx_status_t zx_debug_suspend(zx_handle_t resource);

說明

zx_debug_suspend() 會禁止存取偵錯序列埠 (UART) 硬體,直到後續呼叫 zx_debug_resume() 為止。zx_debug_suspend() 成功傳回後,呼叫端可以視需要安全地移除偵錯序列埠硬體的電源和/或時鐘。

在傳回之前,zx_debug_suspend() 會等待任何進行中的偵錯序列埠存取作業完成,並等待硬體中排入佇列的任何輸出內容傳輸完畢,然後執行硬體關機前所需的任何驅動程式庫專屬準備工作。如果硬體無法繼續執行 (例如傳輸因流量控制而停滯),這可能會無限期封鎖。在 zx_debug_suspend() 中遭到封鎖的執行緒可能會遭到暫停或終止。

偵錯序列埠暫停期間:

  • 記錄訊息會繼續記錄在核心偵錯記錄中。系統會在偵錯序列埠恢復後,將這些訊息傳送至該序列埠,但訊息數量會受限於偵錯記錄的容量。
  • 對 zx_debug_write() 的呼叫會遭到封鎖,直到通訊埠恢復運作為止。在 zx_debug_write() 中遭到封鎖的執行緒可能會遭到暫停或終止。
  • 呼叫 zx_debug_read() 會傳回暫停前收到的任何資料,否則會封鎖,直到資料可用為止。
  • 如果系統發生嚴重錯誤,就不會將任何輸出內容寫入偵錯序列埠。系統會重新啟動 (即使 kernel.halt-on-panic=true),且當機記錄會註明偵錯序列埠在核心恐慌時已暫停。

與 zx_debug_read() 和 zx_debug_write() 不同,zx_debug_suspend() 和 zx_debug_resume() 不依賴 kernel.enable-serial-syscalls 核心指令列選項。僅受資源限制。

權限

resource 必須具有資源種類 ZX_RSRC_KIND_SYSTEM,且基礎為 ZX_RSRC_SYSTEM_DEBUG_BASE。

傳回值

成功時傳回 ZX_OK。

錯誤

ZX_ERR_BAD_HANDLE 資源不是有效的控制代碼。

ZX_ERR_WRONG_TYPE resource 不是資源控制代碼。

ZX_ERR_OUT_OF_RANGE 資源並非偵錯系統資源。

ZX_ERR_NOT_SUPPORTED 系統沒有偵錯序列埠,或核心已設為略過偵錯記錄 (kernel.bypass-debuglog=true)。

ZX_ERR_BAD_STATE 偵錯序列埠已暫停,或正在呼叫 zx_debug_suspend()。

另請參閱