1. Overview

In this tutorial, we’ll look at what ARM processors are in general. Then, we’ll focus on Debian ARMel, ARMhf and ARM64 ports and understand their differences.

2. Background

ARM stands for Acorn RISC Machine. It is a family of RISC (Reduced Instruction Set Computer) architectures for computer processors configured for various environments. Most mobile devices and embedded systems use ARM processor cores.

Modern ARM processors provide functionalities that aren’t supported in earlier models because the ARM architecture continues to evolve.

Debian currently provides three ARM ports to offer the best support for different types of machines:

  • ARMel port: supports older 32-bit ARM processors without hardware FPU (floating-point unit), especially on platforms like openRD, Versatile and plug computers
  • ARMhf port: supports atleast an ARM 32-bit processor with ARMv7 architecture, Thumb-2 and VFP3D16
  • ARM64 port: works on 64-bit processors that implement at least the ARMv8 architecture

Debian also has other ports to ARM hardware that function differently.

While all currently available ARM CPUs can be run in either big or little-endian modes, the majority uses little-endian mode. ARM64, ARMhf, and ARMel support only little-endian systems.

There’s also a package called multiarch that lets us install library packages from multiple architectures on the same machine. However, it does not enable the installation of applications for multiple architecture versions simultaneously.

3. ARMel

ARMel or ARM EABI is the default port in Debian for ARM architecture versions ARM4T, ARM5T, and ARM6. Support for ARM4T stopped with the release of Debian 10 (buster). ARMel is a new version of Embedded ABI (Application Binary Interface). It runs on little-endian mode.

EABI is among the family of ABIs and GNU EABI for Linux is one of them.

ARMel can support hardware floating-point through compatibility mode. This slows performance but creates compatibility with code written for processors without floating-point units.

It also supports earlier 32-bit processors that do not have hardware floating-point unit support.

Let’s use this command to check whether our system runs on ARMel:

$ readelf -A /proc/self/exe | grep Tag_ABI_VFP_args

The command returns blank if it’s an ARMel system or a Tag_ABI_VPS_args tag if it’s ARMhf.

For example, a Raspberry distribution will return a VFP registers tag because it runs on ARMhf. However, a  soft-float Debian Wheezy distribution will give a blank output because it runs on ARMel.

Some of the platforms supported by Debian ARMel include Kirkwood and Orion5x SoC from Marvell with an ARM CPU and Versatile platform with QEMU emulator.

4. ARMhf

ARMhf (ARM hard float) port was developed to support the floating-point unit found on most modern 32-bit ARM boards. Floating-point is very useful for critical accuracy requirements in computing and digital signal processing-based applications.

The minimum requirement for running ARMhf port is an ARMv7 CPU with version 3 of ARM vector floating-point specification(VFPv3).

Platforms that support ARMhf include:

  • freescale MX53 Quick Start Board: an open-source platform used for development with a 1 GHz ARM Cortex-A8 processor
  • NVIDIA Jetson TK1: a developer board containing a 32-bit ARM Cortex-A15 CPU
  • SolidRun Cubox-i4Pro: a small computation platform with an ARM Cortex A9 processor

To check whether our system runs on ARMhf, we can use this command:

$ dpkg --print-architecture

armhf

Alternative commands such as uname -a and arch will show arm7l as the output. This is a group of older 32-bit RISC processors.

5. ARM64

ARM64 is the Debian port name for the 64-bit ARMv8 architecture called aarch64 in upstream toolchains and some other distros. It was started in 2010, long before the hardware to support it was available. This was to ensure there would be something to run it once it arrived.

ARM64 hardware was first launched in a consumer product on the iPhone 5S in 2013, but there were restrictions to accessing it. Debian released the ARM64 port for the first time in the Debian 8 (Jessie) operating system.

Debian ARM64 supports these platforms:

  • Applied Micro (APM) Mustang/X-Gene: first known platform with ARMv8 architecture and an 8-core CPU
  • ARM Juno Development Platform: an open and vendor-neutral ARMv8 development with a 6-core CPU

We can use this command to get our processor type and a list of the various features of our CPU:

$ cat /proc/cpuinfo

processor    : 0
vendor_id    : GenuineIntel
cpu family    : 6
model        : 58
...truncated

Devices powered by ARM64 architecture include Raspberry Pi 2 and 3, Microsoft HoloLens 2, DragonBoard, IoT devices, modern desktops and laptops, smartphones, etc.

6. Conclusion

In this article, we’ve looked at what ARM processors are, and the Debian GNU/Linux ports that are available to support some of its architectures.