Platforms: Userspace (POSIX style)

justincormack edited this page Dec 12, 2014 · 7 revisions
Clone this wiki locally

Support for POSIX-style userspace platforms is included directly in the NetBSD source tree under src/lib/librumpuser. Currently, support is available for Linux, Android, the BSDs and Cygwin. There is also nascent support for Mac OS X.

The easiest way to build rump kernels for userspace targets is to use buildrump.sh, either natively for fast systems or via a cross compiler for slower systems.

History

The original platform for rump kernels was userspace on NetBSD, first published in August 2007. This history of userspace roots still shows in rump kernels with the hypercall interface being called rumpuser.

Two weeks later after support on NetBSD, still August 2007, initial support for Linux was added. Back then, building rump kernels for NetBSD was easy, while building for Linux took a huge deal of manual work. Linux support phased in and out of bitrot over the years, with some adventurous individuals occasionally contributing patches.

One notable point in supporting rump kernels on non-NetBSD platforms was the pkgsrc package from 2009. For the first time, the package made it easy for anyone to build and run rump kernels on for example Linux and FreeBSD.

Though pkgsrc made building rump kernels on non-NetBSD easy, it still required an expert to update the NetBSD source tree that the package built. The next turning point came in 2012 with buildrump.sh, which strived to reach the same level of usability as NetBSD's legendary build script, build.sh. With the buildrump.sh script, it finally became easy to build a given NetBSD source tree as rump kernels for a given target platform with a single command.

Build time options

The default option is to use pthreads for threading, but there is also a fiber based implementation that can be selected at build time.

Tested hosts

Continuous testing and integration for userspace builds is available at http://builds.rumpkernel.org.

Tested machine architectures include x86 (32/64bit), ARM, PowerPC (32/64bit), MIPS (32bit) and UltraSPARC (32/64bit).

Examples of hosts buildrump.sh has been tested on are as follows:

  • Linux

    • Linux Gallifrey 2.6.35.14-106.fc14.x86_64 #1 SMP Wed Nov 23 13:07:52 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux (with seLinux in permissive mode, amd64)
    • Linux vyrnwy 3.6.2-1.fc16.x86_64 #1 SMP Wed Oct 17 05:30:01 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux (Fedora release 16 with read-only /usr/src via NFS)
    • Linux void-rpi 3.6.11_1 #1 PREEMPT Tue Feb 19 17:40:24 CET 2013 armv6l GNU/Linux (Void, Raspberry Pi, evbarm)
    • Linux braniac 3.9.9-1-ARCH #1 SMP PREEMPT Wed Jul 3 22:45:16 CEST 2013 x86_64 GNU/Linux (Arch Linux, amd64, gcc 4.8.1)
    • Linux pike 3.6.7-4.fc17.ppc64 #1 SMP Thu Dec 6 06:41:58 MST 2012 ppc64 ppc64 ppc64 GNU/Linux (Fedora, ppc64)
    • Linux 172-29-171-95.dal-ebis.ihost.com 2.6.32-358.el6.ppc64 #1 SMP Tue Jan 29 11:43:27 EST 2013 ppc64 ppc64 ppc64 GNU/Linux (RHEL6, ppc64, 64 and 32 bit builds, IBM Virtual Loaner Program)
    • Linux fuloong 3.11.6-gnu #8 PREEMPT Mon Oct 28 23:28:22 GMT 2013 mips64 ICT Loongson-2 V0.3 FPU V0.1 lemote-fuloong-2f-box GNU/Linux (Gentoo, mips o32 le)
    • Linux ubnt 2.6.32.13-UBNT #1 SMP Wed Oct 24 01:08:06 PDT 2012 mips64 GNU/Linux (mips o32 be)
    • Linux alpine64 3.14.6-0-grsec #1-Alpine SMP Thu Jun 12 10:58:48 GMT 2014 x86_64 Linux (Alpine, x86_64, Musl libc)
  • Android

    • Android 4.2.2 kernel 3.4.5 ARMv7 Processor rev 2 (v7l) (arm)
  • DragonFly BSD

    • DragonFly 3.2-RELEASE DragonFly v3.2.1.9.g80b03f-RELEASE #2: Wed Oct 31 20:17:57 PDT 2012 root@pkgbox32.dragonflybsd.org:/usr/obj/build/home/justin/src/sys/GENERIC i386
    • DragonFly dragonfly.myriabit.eu 4.0-RELEASE DragonFly v4.0.0.32.gce3e27-RELEASE #25: Mon Nov 24 20:15:26 PST 2014 root@pkgbox64.dragonflybsd.org:/usr/obj/build/home/justin/src/sys/X86_64_GENERIC x86_64
  • FreeBSD

    • FreeBSD frab 9.1-PRERELEASE FreeBSD 9.1-PRERELEASE #5 r243866: Wed Dec 5 02:15:02 CET 2012 root@vetinari:/usr/obj/usr/src/sys/RINCEWIND amd64 (static rump kernel components, with thanks to Philip for test host access)
  • NetBSD

    • NetBSD pain-rustique.localhost 5.1_STABLE NetBSD 5.1_STABLE (PAIN-RUSTIQUE) #5: Wed Feb 16 13:34:14 CET 2011 pooka@pain-rustique.localhost:/objs/kobj.i386/PAIN-RUSTIQUE i386
  • OpenBSD

    • OpenBSD openbsd.myriabit.eu 5.4 GENERIC#37 amd64
  • Solaris

    • SunOS hutcs 5.10 Generic_142900-15 sun4v sparc SUNW,T5240 Solaris (needs xpg4/bin/sh, sparc64 in 64bit mode, sparc in 32bit mode)
    • SunOS pkgsrc-dev 5.11 joyent_20120126T071347Z i86pc i386 i86pc (with thanks to Jonathan for test host access, amd64 in 64bit mode, i386 in 32bit mode)

There is also initial support for Cygwin, but it will not work out-of-the-box due to object format issues (ELF vs. PE-COFF). Mac OS X is likely to require support for its linker.