摘要
使用新的核心和開機映像檔軟性重新啟動系統。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_system_mexec(zx_handle_t resource,
zx_handle_t kernel_vmo,
zx_handle_t bootimage_vmo);
說明
zx_system_mexec()
可接受兩個 vmo 控制代碼:kernel_vmo 應包含核心映像檔,而 bootimage_vmo 應包含一個 init。其位址應以其位址做為核心引數傳遞至新核心。
如要取代執行中的核心,必須提供 ZX_RSRC_KIND_SYSTEM
的資源 (搭配基礎 ZX_RSRC_SYSTEM_MEXEC_BASE
)。
成功後,zx_system_mexec()
應使用 kernel_vmo 中包含的核心映像檔取代目前執行中的核心映像檔,將 bootimage_vmo 內部的 ramdisk 直接載入實體記憶體中的位置,並將已載入 init 的位址提供給新核心。
如要使用 zx_system_mexec()
函式,您必須在核心指令列中指定 kernel.enable-debugging-syscalls=true
。否則,函式會傳回 ZX_ERR_NOT_SUPPORTED
。
權限
resource 的資源類型 ZX_RSRC_KIND_SYSTEM
必須搭配基礎 ZX_RSRC_SYSTEM_MEXEC_BASE
。
kernel_vmo 必須是 ZX_OBJ_TYPE_VMO
類型,且具有 ZX_RIGHT_READ
。
bootimage_vmo 必須是 ZX_OBJ_TYPE_VMO
類型,且具有 ZX_RIGHT_READ
。
傳回值
成功後,zx_system_mexec()
不會傳回。
核心指令列中的 ZX_ERR_NOT_SUPPORTED
kernel.enable-debugging-syscalls
未設為 true
。