Mission Planner on Raspberry Pi 4, no Luck

MissionPlanner should theoretically run on ubuntu 18,19 and 20. As well as on debian.
However, mono and/or the SkiaSharp library don’t particularly like the raspberry pi architecture.

This is libSkiaSharp.so compiled natively on a Pi4 with Raspberry Pi OS Buster arm64.


Doesn’t solve the problem though, at least for me.

1 Like

no it doesn’t unfortunately. i allready found that file.

at the moment i’m trying to compile mono for aarch64. i’m almost certain, that this has to be the problem.
there are stackoverflow tickets about, how mono on raspberry does not support windowsForms dependent software.

however, my build went well untill midway when i got the following error.
if anyone is interested in trying themselves, here is a guide:

https://www.raspberrypi.org/forums/viewtopic.php?t=85807
paired with the original mono guide
https://www.mono-project.com/docs/compiling-mono/compiling-from-git/

make[3]: Verzeichnis „/home/pi/mono/mono/culture“ wird betreten
  CC       libmono_culture_la-locales.lo
cc1plus: warning: command line option ‘-Wmissing-prototypes’ is valid for C/ObjC but not for C++
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
cc1plus: warning: command line option ‘-Wnested-externs’ is valid for C/ObjC but not for C++
cc1plus: warning: command line option ‘-std=gnu99’ is valid for C/ObjC but not for C++
In file included from ../../mono/utils/mono-stack-unwinding.h:12,
                 from ../../mono/utils/mono-threads.h:16,
                 from ../../mono/metadata/handle.h:24,
                 from ../../mono/metadata/threads-types.h:20,
                 from ../../mono/metadata/object-internals.h:17,
                 from ../../mono/metadata/locales.h:16,
                 from locales.c:30:
../../mono/utils/mono-context.h:48:9: error: ‘__uint128_t’ does not name a type; did you mean ‘__uint32_t’?
 typedef __uint128_t MonoContextSimdReg;
         ^~~~~~~~~~~
         __uint32_t
In file included from locales.c:21:
locales.c: In function ‘const void* ves_icall_System_Globalization_CultureData_fill_number_data(gint32, NumberFormatEntryManaged*)’:
locales.c:272:47: warning: comparison of integer expressions of different signedness: ‘gint32’ {aka ‘int’} and ‘unsigned int’ [-Wsign-compare]
  g_assertf (number_index >= 0 && number_index < G_N_ELEMENTS (number_format_entries), "%d", number_index);
../../mono/eglib/glib.h:921:44: note: in definition of macro ‘G_LIKELY’
 #define G_LIKELY(expr) (__builtin_expect ((expr) != 0, 1))
                                            ^~~~
locales.c:272:2: note: in expansion of macro ‘g_assertf’
  g_assertf (number_index >= 0 && number_index < G_N_ELEMENTS (number_format_entries), "%d", number_index);
  ^~~~~~~~~
locales.c: At global scope:
locales.c:792:1: fatal error: opening dependency file .deps/libmono_culture_la-locales.Tpo: Keine Berechtigung
 }
 ^
compilation terminated.

p.s. Raspbian by default is 32 bit. so maybe the solution would be, to not change to 64 bit like i did.

i might have to get a rpi4, ive got lots of odroids, u3, c1, c2 but no rpi4’s

1 Like

a Raspi is always a good thing to have :smiley: :wink:

short update: the “uint128_T” error has definitely something to do with 64bit.
i was able to build mono on the standard 32bit raspbian OS.
However, it did not solve the main problem yet.

two more guides for the interested tinkerers here:


ok can you guys test
https://github.com/meee1/jellyfin-skiasharp-native/suites/783456641/artifacts/8291816

inside is 2 libskiasharp.so files. one is arm the other is arm64

ive got it running on a rpi3

1 Like

@james_pattison , i think yours would have worked, apart from it wasn’t the right skia source. currently needs to be 1.68.1 at a guess you where one or 2 subversions behind this

cool. I’ll use yours :slight_smile:

Michael, 'm getting an 404 not found error with that link.

can you see this page?

Yes, that works fine.

Edit: got it! Mystery’s solution was to log in to github. Things can be so simple sometimes.

I still can’t get it to work michael :frowning:
Do you want me to upload the error log here?

did you use the 674 or the non 64, and what version mono do you have?

from the old log you sent
INFO MissionPlanner.Program - 64bit os False, 64bit process False

so you have 32bit mono
so you need to use the arm libskiasharp.so

I tried pretty much all combinations by now.

But at the moment i am back to raspberry pi4 with the standard debian buster (raspberry OS 10) which runs on 32 bit by standard.
I installed mono 6.8.0, following the instructions from mono-project.com for raspbian 10 with “sudo apt install mono-complete”.
I then copied the ShiaSharp file inside the “ARM” directory over to the main MissionPlanner Directory. However i also tried using the file for ARM64. Both didn’t work.

In the past i also have tried using mono 6.0.0 and 6.4.0. Since i do know, that the latest mono version has some hickups between raspi (read: the amrv7L) and WindowsForms programs. I also tried upgrading the raspian OS to 64 bits. I have tried mono for raspbian and for the standard debian 10. After every change i tried MP1.71 and 1.72 bot with the old shisharp file, aswell as with provided ones for ARM and also the ARM64 version.
Nothing helped.
I even tried compiling mono on the raspberry pi myself. But that broke things even more. Normally. I’ll get atleast the loading screen from MP. After compiling mono, not even that worked.

While installing mono i noticed following message: “Mono precompiling /usr/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.dll for arm (LLVM disabled due to missing SSE4.1”. Could this maybe cause the trouble?

Anyway, here are some stats and logs from the latest test.

pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.19.118-v7l+ #1311 SMP Mon Apr 27 14:26:42 BST 2020 armv7l GNU/Linux
pi@raspberrypi:~ $ mono -V
Mono JIT compiler version 6.8.0.123 (tarball Tue May 12 15:31:43 UTC 2020)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       normal
	Notifications: epoll
	Architecture:  armel,vfp+hard
	Disabled:      none
	Misc:          softdebug 
	Interpreter:   yes
	LLVM:          yes(610)
	Suspend:       preemptive
	GC:            sgen (concurrent by default)

Terminal-MP-mono-Debugger.txt (423.8 KB) mono_crash.0.1.txt (51.0 KB)

i can pretty much get it running on everything i try

my previous tests where on ubuntu, so decided to switch to raspbian

i think your crash logs an’t displaying the STDERR part.

it would be nice to get someone other than me to get it working. but doesn’t look like a wide audience

I See that you’re running it on raspbian Stretch. Which is normal for a raspberry pi3.

Did you try it on raspbian buster (10)?
I can’t get Stretch running on my pi4. There is also some weird stuff going on inside the raspi4. It will tell you, that it is running on an armV7l. However, there is actually an Armv8L inside.

It’s all pretty f*** up :expressionless: