For about six months I’ve been using a Raspberry Pi 3 as my desktop computer at home.
The overall experience is fine, but I had to do a few adjustments.
First was to use KeePass, the second to compile gcc for cross-compilation (ie use buildroot).
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF echo "deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list sudo apt-get update sudo apt-get upgrade sudo apt-get install mono-runtime
The install instruction comes from mono-project and the initial pointer was found on raspberrypi forums, stackoverflow and Benny Michielsen’s blog.
And for some plugin to work I think I had to
apt-get install mono-complete.
Using the Raspberry Pi 3, I recovered an old project based on buildroot for the raspberry pi 2. And just for building the tool-chain I had a few issues.
First the compilation would stop during mnp compilation:
/usr/bin/gcc -std=gnu99 -c -DHAVE_CONFIG_H -I. -I.. -D__GMP_WITHIN_GMP -I.. -DOPERATION_divrem_1 -O2 -Wa,--noexecstack tmp-divrem_1.s -fPIC -DPIC -o .libs/divrem_1.o tmp-divrem_1.s: Assembler messages: tmp-divrem_1.s:129: Error: selected processor does not support ARM mode `mls r1,r4,r8,r11' tmp-divrem_1.s:145: Error: selected processor does not support ARM mode `mls r1,r4,r8,r11' tmp-divrem_1.s:158: Error: selected processor does not support ARM mode `mls r1,r4,r8,r11' tmp-divrem_1.s:175: Error: selected processor does not support ARM mode `mls r1,r4,r3,r8' tmp-divrem_1.s:209: Error: selected processor does not support ARM mode `mls r11,r4,r12,r3' Makefile:768: recipe for target 'divrem_1.lo' failed make: *** [divrem_1.lo] Error 1
I Googled the error and found this post on the Raspberry Pi forum not really helpful…
But I finally found an explanation on Jan Hrach’s page on the subject.
The raspbian distribution is still optimized for the first Raspberry Pi so basically the compiler is limited to the old raspberypi instructions. While I was compiling gcc for a Raspberry Pi 2 so needed the extra ones.
The proposed solution is to basically update raspbian to debian proper.
While this is a neat idea, I still wanted to get some raspbian specific packages (like the kernel) but wanted to be sure that everything else comes from debian. So I did some apt pinning.
First I experienced that pinning is not sufficient so when updating
source.list with plain debian Jessie, make sure to add theses lines before the raspbian lines:
# add official debian jessie (real armhf gcc) deb http://ftp.fr.debian.org/debian/ jessie main contrib non-free deb-src http://ftp.fr.debian.org/debian/ jessie main deb http://security.debian.org/ jessie/updates main deb-src http://security.debian.org/ jessie/updates main deb http://ftp.fr.debian.org/debian/ jessie-updates main deb-src http://ftp.fr.debian.org/debian/ jessie-updates main
Then run the following to get the debian gpg keys, but don’t yet upgrade your system:
apt update apt install debian-archive-keyring
Now, let’s add the pinning.
First if you were using
APT::Default-Release "stable"; in your
apt.conf (as I did) remove it. It does not mix well with fine grained pinning we will then implement.
Then, fill your
/etc/apt/preferences file with the following:
# Debian Package: * Pin: release o=Debian,a=stable,n=jessie Pin-Priority: 700 # Raspbian Package: * Pin: release o=Raspbian,a=stable,n=jessie Pin-Priority: 600 Package: * Pin: release o=Raspberry Pi Foundation,a=stable,n=jessie Pin-Priority: 600 # Mono Package: * Pin: release v=7.0,o=Xamarin,a=stable,n=wheezy,l=Xamarin-Stable,c=main Pin-Priority: 800
Note: You can use
apt-cache policy (no parameter) to debug pinning.
The pinning above is mainly based on the origin field of the repositories (
Finally you can upgrade your system:
apt update apt-cache policy gcc rm /var/cache/apt/archives/* apt upgrade apt-cache policy gcc
Note: Removing the cache ensure we download the packages from debian as raspbian is using the exact same naming but we now they are not compiled with a real armhf tool-chain.
Second issue with gcc
The build stopped on
recipe for target 's-attrtab' failed. There are many references on the web, that one was easy, it ‘just’ need more memory, so I added some swap on the external SSD I was already using to work on buildroot.
That’s it for today, not bad considering my last post was more that 3 years ago…