Skip to content
Snippets Groups Projects
user avatar
Daniel Friesel authored
Squashed commit of the following:

commit 270880c1a815a8652407bd334ffde1e775845c5f
Author: Daniel Friesel <daniel.friesel@uos.de>
Date:   Thu Aug 13 11:05:24 2020 +0200

    herp derp

commit e0546c27220b9afcd6c6bca544fab8d6d816f61f
Author: Daniel Friesel <daniel.friesel@uos.de>
Date:   Thu Aug 13 10:57:59 2020 +0200

    gitlab CI: Use multipass base image, do not pull in recommended packages
774aa577
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.