摘要
暫停存取偵錯序列埠硬體。
宣告
#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()。