sysinit #
The sysinit program provided by Mercury initializes the system and provides critical low-level runtime services for drivers and other processes. It provides the following services:
| Service | Interface | 
|---|---|
| Bootstrap filesystem | fs | 
| Device manager* | devmgr | 
| Device registry* | devregistry | 
| Driver loader* | devloader | 
| Physical memory manager* | pmem | 
| Process manager | procmgr & process | 
| Memory manager | mmapper & munmapper | 
* Available to drivers via the services manifest
Process loader #
The process manager service may be used to query running processes or set up new ones. Calling procmgr::new with a provided argument vector will create a new process, and an ELF image may be loaded into this process via process::load. This will invoke the loader, which in addition to loading the ELF image will perform the following tasks:
- Set up a System-V auxiliary vector and populate the argument vector
 - Allocate an IPC buffer and populate an auxv entry for it
 - Allocate a stack and set the stack pointer accordingly
 
For processes which are not loaded via the driver loader, additional steps are taken:
- Install a copy of the process’s CSpace capability into the process’s CSpace
 - Allocate an I/O buffer pool
 
Driver loader #
The driver loader works in tandem with the process loader to provide additional functionality specific to drivers. The driver loader will fetch the driver manifest from the ELF file, via a special ELF section named .manifest, and load additional capabilities and services accordingly. See the manifest.ini documentation for more details.
Startup #
On startup, sysinit loads its services and runs /sbin/usrinit, which should continue with userspace initialization per system policy (e.g. loading drivers and starting the rest of the system).
sysinit provides the bootstrap filesystem service by loading a tarball from the first boot module provided by the kernel.
usrinit environment #
In addition to the standard process environment provided by process loader, the following services are installed in usrinit and enumerated in the auxiliary vector by default:
- Bootstrap filesystem
 - Device manager
 - Device registry
 - Driver loader
 - Process manager