Userboot

Userboot Protocol (fuchsia.boot.Userboot)

The booted program (userboot.next) receives the server end of a fuchsia.boot.Userboot channel in its bootstrap message as PA_USER0 with argument 0.

Userboot sends pipelined one-way messages on this channel before closing its client end:

  • fuchsia.boot.Userboot/PostStashSvc: Transfers the server end of the fuchsia.boot.SvcStash protocol to the booted program.
  • fuchsia.boot.Userboot/PostBootfsVmo: Transfers the uncompressed BOOTFS VMO to the booted program.
  • fuchsia.boot.Userboot/PostBootfsFiles: Transfers the executable BOOTFS file VMOs already extracted for the first process and its loader service so that the booted program (e.g., component_manager) can reuse them without duplicating pages.
  • fuchsia.boot.Userboot/PostBootHandles: Transfers non-bootstrap handles provided by the kernel (such as the ZBI VMO, kernel file VMOs, and system, MMIO, IRQ, I/O port, and SMC resource handles) to the booted program.

Svc Stub and Svc Stash (fuchsia.boot.SvcStash)

Processes launched by userboot may be provided with a handle of PA_NS_DIR type and path /svc. This allows early boot processes to pipeline requests to services that will eventually become available (such as fuchsia.debugdata.Publisher).

For each launched process given a /svc handle, userboot sends the corresponding server end to the SvcStash channel via fuchsia.boot.SvcStash/Store.