ist mein Linux ARM 32 oder 64 Bit?

60

Unter einem Intel weiß ich, dass ich das Ergebnis von prüfen kann, um uname -mzu wissen, ob mein Betriebssystem 32 oder 64 Bit ist, aber unter ARM ergibt sich Folgendes:

armv7l

Ich folgerte aus

file /usr/bin/ls

dass ich auf einem 32-Bit-Betriebssystem bin, aber wie kann ich das auf einfachere Weise wissen?

Chris Maes
quelle
3
Arm 7 ist 32 Bit. ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.- Wikipedia
Strg-Alt-Delor
@richard Ich habe es mir gedacht, aber wie heißt dann die 64-Bit-Variante?
Chris Maes
1
Ich habe keinen Zugriff auf eine ARM-Maschine, aber was ist die Ausgabe von uname -aund gcc -v? Diese könnten hilfreich sein.
Terdon
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
Arm war die letzte 32-Bit-CPU, die 64-Bit lief (mit Ausnahme derjenigen, die gestorben sind). Die meisten gingen auf 64-Bit und starben dann aufgrund schlechten Marketings - vorausgesetzt, dass es ausreicht, besser zu sein. Der Intel x86 war der vorletzte, obwohl AMD 64 Bit hinzufügte.
Strg-Alt-Delor

Antworten:

74

Es gibt verschiedene Abstufungen, da Sie ein 32-Bit- oder ein gemischtes Betriebssystem auf einer 64-Bit-fähigen CPU ausführen können. Siehe 64-Bit-Kernel, aber alle ausführbaren 32-Bit-ELF-Prozesse, wie ist das? für eine detaillierte Diskussion (geschrieben für x86, aber das meiste gilt auch für Arm).

Das Prozessormodell finden Sie in /proc/cpuinfo. Zum Beispiel:

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

ARMv7 (und darunter) ist 32-Bit. ARMv8 führt den 64-Bit-Befehlssatz ein.

Wenn Sie sehen möchten, ob Ihr System 64-Bit-Binärdateien unterstützt, überprüfen Sie die Kernelarchitektur:

$ uname -m
armv7l

Auf einem 64-Bit-Prozessor wird eine Zeichenfolge angezeigt, die mit armv8(oder höher) beginnt, wenn der unameProzess selbst ein 32-Bit-Prozess oder aarch64ein 64-Bit-Prozess ist. (Siehe auch https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Gilles 'SO - hör auf böse zu sein'
quelle
2
Ich bestreite deine Antwort nicht, aber leider IST Android EIN LINUX, also nehme ich an, dass es irgendwo einen Befehl gibt, der es lokal anzeigt und keine Dokumentation auf irgendeiner Seite
liest
1
@THESorcerer Android verwendet einen Linux-Kernel, ist jedoch kein Linux-System. Es gibt keine Linux User Land Tools (nur eine sehr kleine Teilmenge). Unter Android denke ich, dass die 64-Bit-Unterstützung im Basisbetriebssystem konsistent ist. cat /proc/$$/mapsLassen Sie Sie also wissen, ob das System über eine ADB-Befehlszeile 64-Bit oder 32-Bit ist.
Gilles 'SO- hör auf böse zu sein'
3
Ich glaube, dass Raspberry Pi 3, das ARMv8 (CRC, keine optionale Krypto) ist, armv7ltrotz seines ARMv8 berichten wird. Ich bin mir also ziemlich sicher, dass die falsche CPU gemeldet wird.
1
@jww Wenn es meldet armv7l, bedeutet dies, dass Sie einen 32-Bit-Kernel ausführen . Sie können einen 32-Bit-Kernel auf einer 64-Bit-CPU ausführen. Wenn Sie Informationen zur CPU wünschen, lesen Sie /proc/cpuinfo.
Gilles 'SO- hör auf böse zu sein'
uname -m gibt nur "aarch64" zurück. / proc / cpuinfo enthält auch nicht immer einen Namen für einen Prozessor.
Halsafar
23

Wie Richard betont, armv7sind alle Varianten 32-Bit, es gibt also keine redundanten Bezeichnungen armv7-32usw.

Auf einem Linux-System können Sie leicht, wenn auch nicht wirklich endgültig, Folgendes überprüfen, indem Sie eine gemeinsame ausführbare Datei untersuchen:

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

Ich sage "nicht definitiv", weil es möglich ist, ausführbare 32-Bit-Dateien auf einem 64-Bit-System auszuführen.

Es scheint nichts narrensicheres in /procoder zu sein /sys; Die Ausgabe von /proc/cpuinfo kann einige wichtige Hinweise liefern. Wenn Sie aus irgendeinem Grund eine automatische Überprüfung benötigen, erscheint das Erstellen einer Tabelle, die dem Feld "Modellname" zugeordnet ist, als eine potenziell verlässliche Methode (andere Felder, einschließlich "Modell", "CPU-Familie" usw., sehen optional aus - sie funktionieren nicht). Auf einem Broadcom 2708 ARMv6-Prozessor erscheint mir das überhaupt nicht).

Goldlöckchen
quelle
Also ist armv7l 32 Bit oder?
Bakalolo
1
@ Bakalolo Lesen Sie die Frage und die akzeptierte Antwort langsam;)
Goldlöckchen
11

Installieren Sie das Paket 'lshw'.

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

Scheint, als ob die meisten Möglichkeiten, um die Anzahl der Bits zu sehen, darin bestehen, dass arm7 = 32 Bit ist und dass dies zwar stimmt, aber was ist damit?

pi@rpi9:~ $ getconf LONG_BIT
32

Und wenn Sie nach dem CPU-Modell suchen möchten, verwende ich normalerweise Bogen

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

pi@rpi9:~ $ tr '\0' '\n' </proc/device-tree/model;arch
Raspberry Pi 3 Model B Rev 1.2
armv7l
lpaseen
quelle
getconf LONG_BIT ist sehr einfach
Abdulkarim Kanaan
1

Versuche Folgendes.

// -*- 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;
}

Die Adressgröße ist void*.

ceving
quelle
1
sizeofRetouren, size_tdie ausgedruckt werden müssen mit%zu . Die Verwendung des falschen
Formatspezifizierers
und die Größe des Hohlraums * ist nicht unbedingt die Architekturbitbreite. Haben Sie schon einmal von x32 ABI sites.google.com/site/x32abi
phuclv
Ebenso getconf -a | grep LONG_BIT
kaiwan
2
Dies sagt Ihnen nichts anderes als die Art Ihres Compilers .
rsethc
-5

Nein, es ist ein 64-Bit-Computer. Es ist ein Allwinner H8, der ein Doppel-ARM-7 ist. 8 Kerne, 64 Bits, powervr, sgx 544, mit doppelter Geschwindigkeit (700 MHz).

Also nein, es kann 64 Bit sein. Nur das Betriebssystem könnte 32 sein.

Jaap Daniels
quelle
Wo haben Sie festgestellt, dass das OP Allwinner H8 verwendet? Die Architektur ist armv7l, die eindeutig keine 64-Bit-Architektur ist
phuclv
Es ist besser , einen Weg zu zeigen , um die gewünschten Informationen von finden innerhalb des Systems anstelle von Drittanbietern Informationen aus externen Quellen zu verwenden. Dies ist besser geeignet, um ein Kommentar als eine Antwort zu sein (daher alle Abwärtsstimmen).
Synetech,