is my linux ARM 32 or 64 bit?
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)
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).
Install the 'lshw' package.
# lshw
...
description: Computer
product: Raspberry Pi 3 Model B Rev 1.2
width: 32 bits
...