è il mio ARM Linux a 32 o 64 bit?


60

sotto un intel so che posso vedere il risultato di uname -msapere se il mio sistema operativo è a 32 o 64 bit, ma sotto ARM questo dà:

armv7l

Ho dedotto da

file /usr/bin/ls

che sono su un sistema operativo a 32 bit, ma come posso saperlo in modo più semplice?


3
il braccio 7 è a 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

@richard Lo stavo indovinando, ma come si chiama la variante a 64 bit?
Chris Maes,

1
Non ho accesso a una macchina ARM ma qual è l'output di uname -ae gcc -v? Quelli potrebbero essere utili.
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 è stato l'ultimo della CPU a 32 bit a passare a 64 bit (esclusi quelli che sono morti). La maggior parte è andato a 64 bit e poi è morto, a causa della scarsa commercializzazione, supponendo che essere migliori sia sufficiente. L'Intel x86 è stato il penultimo, sebbene sia stato AMD a aggiungere 64 bit.
ctrl-alt-delor

Risposte:


75

Esistono diverse gradazioni, poiché è possibile eseguire un sistema operativo a 32 bit o misto su una CPU con capacità a 64 bit. Vedi kernel a 64 bit, ma tutti i processi eseguibili ELF a 32 bit in esecuzione, come va? per una discussione dettagliata (scritta per x86, ma la maggior parte si applica anche a arm).

Puoi trovare il modello del processore in /proc/cpuinfo. Per esempio:

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

ARMv7 (e precedenti) è a 32 bit. ARMv8 introduce il set di istruzioni a 64 bit.

Se vuoi vedere se il tuo sistema supporta binari a 64 bit, controlla l'architettura del kernel:

$ uname -m
armv7l

Su un processore a 64 bit, vedresti una stringa che inizia con armv8(o sopra) se il unameprocesso stesso è un processo a 32 bit o aarch64se è un processo a 64 bit. (Vedi anche https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )


2
Non contesto la tua risposta, ma sfortunatamente Android È UN LINUX, quindi supponiamo che ci sia un comando,
QUALCUNO CHE

1
@THESorcerer Android utilizza un kernel Linux ma non è un sistema Linux. Non ha strumenti di terra per utenti Linux (solo un sottoinsieme molto piccolo). Su Android, penso che il supporto a 64 bit sia coerente nel sistema operativo di base, quindi cat /proc/$$/mapsti farà sapere se il sistema è a 64 o 32 bit da una riga di comando adb.
Gilles 'SO- smetti di essere malvagio' il

3
Credo che Raspberry Pi 3, che è ARMv8 (CRC, nessun Crypto opzionale) riporterà armv7lanche se è ARMv8. Quindi sono abbastanza sicuro che verrà segnalata la CPU sbagliata.

1
@jww Se riporta armv7l, significa che stai eseguendo un kernel a 32 bit. È possibile eseguire un kernel a 32 bit su una CPU a 64 bit. Se vuoi informazioni sulla CPU, leggi /proc/cpuinfo.
Gilles 'SO- smetti di essere malvagio' il

uname -m restituisce semplicemente "aarch64". / proc / cpuinfo non sempre contiene neanche un nome per un processore.
Halsafar,

23

Come sottolinea Richard, le armv7varianti sono tutte a 32 bit, quindi non esiste un'etichetta ridondante armv7-32, ecc.

Su un sistema Linux, puoi facilmente, anche se non in modo definitivo, controllare esaminando un eseguibile comune:

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

Dico "non definitivamente" perché è possibile eseguire eseguibili a 32 bit su un sistema a 64 bit.

Non sembra esserci nulla di infallibile in /proco /sys; l'output di /proc/cpuinfo può fornire alcuni indizi significativi. Se per qualche motivo hai bisogno di un controllo automatico, la creazione di una tabella mappata al campo "nome modello" sembra un metodo potenzialmente valido (altri campi, tra cui "modello", "famiglia cpu", ecc. Sembrano opzionali - non non appare affatto per me su un processore ARMv6 Broadcom 2708).


Quindi armv7l ha 32 bit giusto?
Bakalolo,

1
@bakalolo Leggi la domanda e la risposta accettata lentamente;)
goldilocks il

11

Installa il pacchetto 'lshw'.

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

3

Sembra che la maggior parte dei modi per vedere il conteggio dei bit sia in qualche modo sapere che arm7 = 32 bit e mentre ciò può essere vero, ma che dire di

pi@rpi9:~ $ getconf LONG_BIT
32

E se vuoi cercare il modello della cpu normalmente uso arch

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

getconf LONG_BIT è molto semplice
Abdulkarim Kanaan il

1

Prova quanto segue.

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

La dimensione dell'indirizzo è void*.



e la dimensione del vuoto * non è necessariamente la larghezza dei bit dell'architettura. Hai mai sentito parlare di x32 ABI sites.google.com/site/x32abi
phuclv,

Allo stesso modo, getconf -a | grep LONG_BIT
kaiwan

2
Questo non ti dice altro che la natura del tuo compilatore .
rsethc,

-5

No, è un computer a 64 bit. È un Allwinner H8, la strega è un doppio ARM-7. 8 core, 64 bit, powervr, sgx 544, a doppia velocità (700mhz).

Quindi no, è in grado di essere a 64 bit. Solo il sistema operativo potrebbe essere 32.


dove hai scoperto che l'OP utilizza Allwinner H8? L'architettura è armv7l che chiaramente non è a 64 bit
phuclv

È meglio dimostrare un modo per trovare le informazioni desiderate all'interno del sistema invece di utilizzare informazioni di terze parti da fonti esterne. Questo è più adatto per essere un commento che una risposta (quindi tutti i voti negativi).
Synetech,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.