~sircmpwn/mercury

Low-level userspace for writing Helios drivers
usrinit: add mount command
vfs: rig up more fs operations
sysinit: support stat / on bootstrapfs

refs

master
browse  log 

clone

read-only
https://git.sr.ht/~sircmpwn/mercury
read/write
git@git.sr.ht:~sircmpwn/mercury

You can also use your local clone with git send-email.

#Mercury

Mercury is a userspace for the Helios micro-kernel which provides essential low-level userspace services and a framework for hardware drivers.

#What's in the box

Mercury provides a number of features:

  • Protocols for use with ipcgen for system services, drivers, etc
  • A subset of the Hare standard library
  • Various useful libraries for implementing drivers, e.g. common PCI code
  • A "sysinit" program
    • Process manager
    • Driver manager & loader
    • Early filesystem services via an initramfs
    • Runs /sbin/usrinit for further system initialization
  • A driver debugging environment
    • Provides a default usrinit that offers a simple shell with "root" access for developing and testing drivers
    • Provides scripts and tooling for building drivers

A few stock drivers are included, mainly for debugging purposes, such as a serial console. A broader collection of drivers based on Mercury is available in the Venus repository. A useful user system and user programming environment is provided by Gaia. See mercury-libc for C programming support.

#Building Mercury

Mercury has the same dependencies as Helios, plus ipcgen, which must be installed to your $PATH when building.

Copy config.def.mk to config.mk and edit it to taste. You need to provide the path to a Helios source tree in the HELIOS variable; it will be automatically compiled when building Mercury.

Run make to build boot.iso, which can be written to a USB stick and booted on hardware, or make run to boot it in qemu. make nographic will boot with a serial console attached to stdin/stdout rather than opening a virtual display; this is generally the more useful approach for testing.