Raspberry Pi Type 3 has 64-bit CPU, but its architecture is not arm64
but armhf
.
What is the difference between arm64
and armhf
?

- 2,539
- 2
- 10
- 16
-
24armhf = hardware floating point instructions + 32-bit instruction set. 64-bit ARM supports hardware floating point and NEON by default, so no need to specify a qualifier like 'hf'. As mentioned below, RPi foundation hasn't added support yet for 64-bit mode on the Pi3. – BitBank Jun 13 '16 at 16:15
-
3Please note that Arch linux community division dedicated to ARM platform (https://archlinuxarm.org) already has support for Aarch64 on Rpi3. You can download an image for Rpi3. – Amit Vujic Mar 08 '17 at 01:02
3 Answers
armhf
stands for "arm hard float", and is the name given to a debian port for arm processors (armv7+) that have hardware floating point support.
On the beaglebone black, for example:
:~$ dpkg --print-architecture
armhf
Although other commands (such as uname -a
or arch
) will just show armv7l
:~$ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 2 (v7l)
BogoMIPS : 995.32
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls
...
The vfpv3
listed under Features
is what refers to the floating point support.
Incidentally, armhf
, if your processor supports it, basically supersedes Raspbian, which if I understand correctly was mainly a rebuild of armhf
with work arounds to deal with the lack of floating point support on the original raspberry pi's. Nowdays, of course, there's a whole ecosystem build up around Raspbian, so they're probably not going to abandon it. However, this is partly why the beaglebone runs straight debian, and that's ok even if you're used to Raspbian, unless you want some of the special included non-free software such as Mathematica.

- 2,409
- 21
- 32

- 4,842
- 2
- 25
- 30
-
12Note that debian and raspbian apparently mean different things by armhf: https://raspberrypi.stackexchange.com/a/87403/103374 – codeling May 07 '19 at 05:01
Update: Yes, I understand that this answer does not explain the difference between arm64
and armhf
. There is a great answer that does explain that on this page. This answer was intended to help set the asker on the right path, as they clearly had a misunderstanding about the capabilities of the Raspberry Pi at the time of asking.
Where are you seeing that the architecture is armhf
? On my Raspberry Pi 3, I get:
$ uname -a
armv7l
Anyway, armv7
indicates that the system architecture is 32-bit. The first ARM architecture offering 64-bit support is armv8. See this table for reference.
You are correct that the CPU in the Raspberry Pi 3 is 64-bit, but the Raspbian OS has not yet been updated for a 64-bit device. 32-bit software can run on a 64-bit system (but not vice versa). This is why you're not seeing the architecture reported as 64-bit.
You can follow the GitHub issue for 64-bit support here, if you're interested.

- 1,695
- 13
- 18
It's important to realize which commands are reporting on your kernel software architecture and which refer to hardware. Until recently, Raspberry Pi did not write 64-bit OS releases, so the 64-bit hardware 3b+ for example, ran a 32-bit OS. This can lead to some confusion when you run commands to print architecture. Don't draw the wrong conclusion, though. You'll notice on the Raspberry Pi OS release page that the new 64-bit release is compatible with older Pi 3 hardware, which have 64-bit ARM processors.

- 68
- 8
-
To add to the confusion, Raspberry is now loading a 64-bit kernel on Rpi 4's by default. Even if the OS is 32-bit (you can force it to load through config.txt on Rpi 3's). Not that there is anything wrong as the 32-bit OS appears to work fine with a 64-bit kernel for the most part (some people have reported issues). Unfortunately, it means you cannot use "uname -a" to learn what OS architecture you are running. After some searching, I finally learned that "file /lib/systemd/systemd" is a reliable way to determine if the OS is 32-bit or 64-bit. – Robert G. Schaffrath May 23 '23 at 17:41