总结
使用新内核和启动映像软重启系统。
声明
#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
。