摘要
暂停对调试串行端口硬件的访问。
声明
#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() 中阻塞的线程可能会被暂停或终止。
在调试串行端口暂停期间:
- 日志消息会继续记录在内核调试日志中。 在恢复后,这些日志将发送到调试串行端口,具体取决于 debuglog 的容量。
- 对
zx_debug_write()的调用会一直处于阻塞状态,直到端口恢复。在zx_debug_write()中被阻塞的线程可能会被暂停或终止。 - 对
zx_debug_read()的调用会返回在挂起之前收到的所有数据,否则会阻塞,直到数据可用。 - 如果系统发生 panic,则不会向调试串行端口写入任何输出。相反,系统会重新启动(即使
kernel.halt-on-panic=true),并且崩溃日志会注明调试串行端口在发生 panic 时已暂停。
与 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() 的另一个调用正在进行中。