摘要
使用新的内核和启动映像软重启系统。
声明
#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_KIND_SYSTEM
和基本资源
必须提供 ZX_RSRC_SYSTEM_MEXEC_BASE
。
成功后,zx_system_mexec()
应取代当前运行的内核
包含 kernel_vmo 中包含的内核映像的映像,请加载 ramdisk
包含在 bootimage_vmo 中,并粘贴到物理内存和分支中的某个位置
直接复制到新内核中,同时提供已加载的 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
。