Arm - Raspberry Pi

Arm - BeagleBoard Black

Arm - Odroid

Intel

 

Here is an example of MRLians group cooperation in order to develop BETTER STRONGER FASTER software.  This is information gathered from my BeagleBoard & Intel machine and DJ's Raspberry Pi & his Odroid (great that DJ's hardware is running at all times). The purpose is trying to make MRL smarter so when Services are installed, it matches the correct binaries to the correct platform - this allows MORE WORKY.

Of course it might be easier not to support so many platforms, but then MRL wouldn't be "One Software to Rule them All"

Ok - the Arm world is a little new to MRL, and there are more "versions" than Intel which can possibly prevent code from working.  One difference is the processors instruction set.  Fortunately, on Linux (Yay!) we can get information from the /proc file system which tells us some details of the operating system and cpu.

There are 2 details which can prevent code from executing correctly on Arm processors that I currently know about.  They are :

  • CPU instruction set version
  • Hard / Soft floating point

When cpu instruction set version changes there is a chance code will not be compatible between the two versions.  In some cases apparently it works, in others it doesn't.  It all depends on the details of the code and the new instruction set.

As far as I can tell the hard / soft is a critical aspect - and the entire operations system is compiled with the concept of being hard or soft.  All code needs to be compiled with this information (either hard or soft) otherwise it will not work.  The entire JVM is compiled one way or the other.  Why? Because Arm started small (without hardware floating point support) .. and a lot of software (including operating systems) were compiled to use soft floating point.  "Now", most recent Arm devices have hardware floating point support, but the operating systems and support software is trailing behind.  This is why early Raspberry Pi operating system was "soft float", although the Ras Pi's hardware supports floating point operations.

You can tell the cpu instruction set from the Processor line - BBB & Odroid are Armv7 & Raspi is Armv6.
The critical floating point support "I think" can be derived from Features - if there is neon vpf# - this means its soft float - if its not there .. then its hard float.

The plan is now, when MRL lands on new hardware - and it's ARM / Linux .. it will match the correct cpu instruction set & hard/soft float - and pull the correct binaries for services which require native code like OpenCV, PointCloud, and Arduino...

References :