Setting up a modern .NET stack on ARM devices

These are my (work-in-progress) notes on setting up a bleeding-edge Mono runtime and ASP.NET vNext on Raspberry Pi and ODROID devices with hardware floating point.

Building Mono from Source

# I'm going to do everything as root
su -
# grab minimal dependencies
apt-get install build-essential mono-runtime autoconf libtool automake
# import required certificates
mozroots --import --ask-remove --machine

# Now check out the Mono tree (this alone will take ages if you have a slow SD card)
git clone git://
cd mono
./ --prefix=/usr/local
# grab the bootstrap compiler
make get-monolite-latest
# now is a nice time to go off and take a long stroll by the beach
# use this instead if you have distcc like me, it will speed up building the native bits: 
# DISTCC_NODES=“node1 node2 node3 node4 localhost” make -j5 CC=distcc
# now install it locally
make install
# Should report 3.10.1 (or above) and hardware floating point
mono --version

Here’s my current sample output on a Pi:

Mono JIT compiler version 3.10.1 (master/8da186e Sat Oct 25 19:32:35 WEST 2014)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors.
        TLS:           __thread
        SIGSEGV:       normal
        Notifications: epoll
        Architecture:  armel,vfp+hard
        Disabled:      none
        Misc:          softdebug 
        LLVM:          supported, not enabled.
        GC:            sgen

A Note on LLVM support

It’s possible to set up the Mono LLVM fork to have Mono use LLVM instead of its built-in JIT, but it requires picking the right Git branch and passing both --enable-llvm=yes to and --llvm to mono itself and is not very useful on the Pi, since the trade-offs in RAM/performance are debatable. Start up time, in particular, seems to take a sizable hit.


This uses to fetch the nightly vNext package builds (by Eilon Lipton, who works at Microsoft), so your mileage may vary depending on how stable the nightlies are.

# grab K tools
curl | sh && source ~/.kre/kvm/ 
kvm upgrade

# add the package repo certificates
sudo certmgr -ssl -m
sudo certmgr -ssl -m
mozroots --import --sync
# run the samples
git clone
cd cd home/samples/HelloWeb
kpm restore -s