Soft reboot the system with a new kernel and bootimage.


#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() accepts two vmo handles: kernel_vmo should contain a kernel image and bootimage_vmo should contain an initrd whose address shall be passed to the new kernel as a kernel argument.

To supplant the running kernel, a resource of ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_MEXEC_BASE must be supplied.

Upon success, zx_system_mexec() shall supplant the currently running kernel image with the kernel image contained within kernel_vmo, load the ramdisk contained within bootimage_vmo to a location in physical memory and branch directly into the new kernel while providing the address of the loaded initrd to the new kernel.

To use the zx_system_mexec() function, you must specify kernel.enable-debugging-syscalls=true on the kernel command line. Otherwise, the function returns ZX_ERR_NOT_SUPPORTED.


resource must have resource kind ZX_RSRC_KIND_SYSTEM with base ZX_RSRC_SYSTEM_MEXEC_BASE.

kernel_vmo must be of type ZX_OBJ_TYPE_VMO and have ZX_RIGHT_READ.

bootimage_vmo must be of type ZX_OBJ_TYPE_VMO and have ZX_RIGHT_READ.

Return value

zx_system_mexec() shall not return upon success.

ZX_ERR_NOT_SUPPORTED kernel.enable-debugging-syscalls is not set to true on the kernel command line.

See also