zx_system_mexec

总结

使用新内核和启动映像软重启系统。

声明

#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 应包含 initrd,其地址应作为内核参数传递给新内核。

如需取代正在运行的内核,必须提供以 ZX_RSRC_SYSTEM_MEXEC_BASE 为基数的 ZX_RSRC_KIND_SYSTEM 资源。

成功后,zx_system_mexec() 应使用 kernel_vmo 中包含的内核映像取代当前运行的内核映像,将 bootimage_vmo 中包含的 ramdisk 加载到物理内存中的某个位置,并直接分支到新内核,同时将已加载 initrd 的地址提供给新内核。

如需使用 zx_system_mexec() 函数,您必须在内核命令行中指定 kernel.enable-debugging-syscalls=true。否则,该函数会返回 ZX_ERR_NOT_SUPPORTED

权限

resource 必须具有基本 ZX_RSRC_SYSTEM_MEXEC_BASE 的资源种类 ZX_RSRC_KIND_SYSTEM

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

另请参阅