is my linux ARM 32 or 64 bit?

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?

Asked By: Chris Maes

||

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).

Answered By: goldilocks

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 a string starting with armv8 (or above) if the uname process itself is a 32-bit process, or aarch64 if it’s a 64-bit process. (See also https://stackoverflow.com/questions/45125516/possible-values-for-uname-m)

Install the ‘lshw’ package.

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

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.

Answered By: Jaap Daniels

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 bitn", #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*.

Answered By: ceving

Seems like most ways to see bit count is to somehow know that arm7=32 bit and while that may be true but what about

pi@rpi9:~ $ getconf LONG_BIT
32

And if you want to look for the cpu model I normally use arch

root@rpi4:~# tr '' 'n' </proc/device-tree/model;arch
Raspberry Pi Model B Rev 2
armv6l

pi@rpi9:~ $ tr '' 'n' </proc/device-tree/model;arch
Raspberry Pi 3 Model B Rev 1.2
armv7l
Answered By: lpaseen
Categories: Answers Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.