Skip to content
Snippets Groups Projects
user avatar
Daniel Friesel authored
28047525
History

multipass - a multi-architecture library operating system

multipass aims to aid development and evaluation of operating system components on a diverse set of architectures. It provides a basic set of drivers (e.g. for standard output on a serial interface) and tries to get out of the way as much as possible.

multipass is single-threaded by design. At compile-time, the switch app=... selects an application, which must implement int main(void) and do everything itself from that point on. When using loop=1, users must also implement void loop(void), which will be executed roughly once per second

  • but only if the main application is idle.

Getting Started

The compilation process is controlled by the Makefile, which also contains targets for flashing microcontrollers, info, and help output. Most targets require two mandatory arguments: arch (target architecture) and app (which application to build and run). Operating system behaviour is fine-tuned using additional (optional) flags, which may be set both on the command line and in an application Makefile.

To avoid redundancy in the typical make program arch=... app=... && make monitor arch=... app=... workflow, two helper scripts are provided:

  • ./mp is a shortcut for make info and make program (build and flash)
  • ./mpm is a shortcut for make info, make program, and make monitor (build, flash, and monitor output)

Flags are passed to each make invocation.

For a quick start, try ledblink:

./mpm arch=posix app=ledblink

You should see some data about the compilation process, "Hello, world!", and some numbers. As POSIX is a fake-architecture (it builds an ELF binary which is executed directly on Linux), you do not need a microcontroller to run it. Terminate execution using Ctrl+C.

To see the blinkenlights, there's an optional (arch=posix-specific) flag:

./mpm arch=posix app=ledblink gpio_trace=1

Now, you should see a simulated LED being toggled every second.

Supported Architectures, Drivers, and Flags

To see all supported architectures, run make help arch=posix. It will also show architecture-independent flags and drivers.

For architecture-specific options, set the arch flag, e.g. make help arch=arduino-nano.