Learn through the super-clean Baeldung Pro experience:
>> Membership and Baeldung Pro.
No ads, dark-mode and 6 months free of IntelliJ Idea Ultimate to start with.
Last updated: March 18, 2024
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.
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:
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.
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.
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:
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.
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:
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.
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.