under an intel I know I can look at the outcome of uname -m to know if my OS is 32 or 64 bit, but under ARM this gives:

armv7l

I deduced from

file /usr/bin/ls

that I'm on a 32-bit OS, but how can I know this in an easier way?

  • 3
    arm 7 is 32 bit. ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic. — wikipedia – ctrl-alt-delor Jun 10 '14 at 12:37
  • @richard I was guessing so, but then what is the name of the 64-bit variant? – Chris Maes Jun 10 '14 at 12:39
  • 1
    I don't have access to an ARM machine but what is the output of uname -a and gcc -v? Those might be helpful. – terdon Jun 10 '14 at 12:44
  • Announced October 2011, ARMv8-A (often called ARMv8 although not all variants are 64-bit such as ARMv8-R) represents a fundamental change to the ARM architecture. It adds a 64-bit architecture, named "AArch64", and a new "A64" instruction set. AArch64 provides user-space compatibility with ARMv7-A ISA, the 32-bit architecture, therein referred to as "AArch32" and the old 32-bit instruction set, now named "A32" ARM announced their Cortex-A53 and Cortex-A57 cores on 30 October 2012.en.wikipedia.org/wiki/ARM_architecture#64.2F32-bit_architecture – ctrl-alt-delor Jun 10 '14 at 12:48
  • Arm was the last of the 32bit cpu to go 64bit (excluding those that died). Most went 64bit and then died, because of poor marketing — assuming that being better is enough. The Intel x86 was the second to last, though it was AMD that added 64 bit. – ctrl-alt-delor Jun 10 '14 at 12:52
up vote 68 down vote accepted

There are several gradations, since you can run a 32-bit or mixed operating system on a 64-bit-capable CPU. See 64-bit kernel, but all 32-bit ELF executable running processes, how is this? for a detailed discussion (written for x86, but most of it applies to arm as well).

You can find the processor model in /proc/cpuinfo. For example:

$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)

ARMv7 (and below) is 32-bit. ARMv8 introduces the 64-bit instruction set.

If you want to see whether your system supports 64-bit binaries, check the kernel architecture:

$ uname -m
armv7l

On a 64-bit processor, you'd see armv8 (or above).


Right now, if you were running a 64-bit ARM, you'd know.

  • 1
    I don't contest your answer, but unfortunately android IS A LINUX, so, there suppose to be some command, SOMEWHERE that show it locally and not to read a documentation on some page – THESorcerer Feb 6 '15 at 9:04
  • 1
    @THESorcerer Android uses a Linux kernel but it is not a Linux system. It does not have Linux user land tools (only a very small subset). On Android, I think 64-bit support is consistent in the base OS, so cat /proc/$$/maps will let you know whether the system is 64-bit or 32-bit from an adb command line. – Gilles Feb 6 '15 at 9:11
  • 2
    I believe Raspberry Pi 3, which is ARMv8 (CRC, no optional Crypto) will report armv7l even though its ARMv8. So I'm pretty sure the wrong CPU will be reported. – jww Jul 25 '17 at 2:02
  • 1
    @jww If it reports armv7l, it means you're running a 32-bit kernel. You can run a 32-bit kernel on a 64-bit CPU. If you want information about the CPU, read /proc/cpuinfo. – Gilles Jul 25 '17 at 4:53

As richard points out, armv7 variants are all 32-bit, so there is no redundant label armv7-32, etc.

On a linux system, you can easily, although not truly definitively, check by examining a common executable:

> which bash
/bin/bash
> file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...

I say "not definitively" because it is possible to run 32-bit executables on a 64-bit system.

There does not appear to be anything foolproof in /proc or /sys; the output from /proc/cpuinfo may provide some significant clues. If for some reason you need an automated check, creating a table mapped to the "model name" field seems like one potentially sound method (other fields, including "model", "cpu family", etc. look optional -- they don't appear at all for me on a Broadcom 2708 ARMv6 processor).

  • So armv7l is 32 bit right? – bakalolo Jun 22 '17 at 21:36
  • @bakalolo Read the question and the accepted answer slowly ;) – goldilocks Jun 23 '17 at 10:44

Install the 'lshw' package.

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...

Try the following.

// -*- compile-command: "gcc -Wall -o sizeof sizeof.c && ./sizeof" -*-

#include <stdio.h>
#include <limits.h>

#define size(t) { t x; printf("%s:\t%3lu bit\n", #t, CHAR_BIT * sizeof x); }

int main (int argc, char *argv[])
{
  size(char);
  size(short);
  size(int);
  size(long);
  size(void*);
  return 0;
}

The address size is void*.

Nope it's a 64-bit computer. It's an Allwinner H8, witch is a double ARM-7. 8 cores, 64 bits, powervr, sgx 544, at double speed (700mhz).

So no, it's capable of being 64 bit. Just the OS might be 32.

  • where did you find that the OP's using Allwinner H8? The architecture is armv7l which is clearly not a 64-bit one – phuclv May 3 '17 at 2:00

protected by Community Jul 16 '17 at 5:42

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.