sotto unintelligence so di poter esaminare il risultato di uname -m
per sapere se il mio sistema operativo è 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 sapere in modo più semplice?
Commenti
Answer
Ecco sono diverse gradazioni, poiché è possibile eseguire un sistema operativo a 32 bit o misto su una CPU compatibile con 64 bit. Vedi kernel a 64 bit, ma tutti i processi eseguibili ELF a 32 bit in esecuzione, comè questo? per una discussione dettagliata (scritto per x86, ma la maggior parte si applica da armare).
Puoi trovare il modello del processore in /proc/cpuinfo
. Ad esempio:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (e sotto) è 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 larchitettura del kernel :
$ uname -m armv7l
Su un processore a 64 bit, “dovresti vedere una stringa che inizia con armv8
(o superiore ) se il uname
stesso è un processo a 32 bit, o aarch64
se “è un processo a 64 bit. (Vedi anche https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Commenti
- Non ‘ t contestare la tua risposta, ma sfortunatamente Android È UN LINUX, quindi, supponiamo che ci sia qualche comando, DA QUALCHE PARTE che lo mostri localmente e non per leggere un documentazione su qualche pagina
- @THESorcerer Android usa un kernel Linux ma non è un sistema Linux. Non ha strumenti di terra per utenti Linux (solo un piccolo sottoinsieme). Su Android, penso che il supporto a 64 bit sia coerente nel sistema operativo di base, quindi
cat /proc/$$/maps
ti farà sapere se il sistema è a 64 bit o 32 bit da una riga di comando adb. - Credo che Raspberry Pi 3, che è ARMv8 (CRC, nessuna crittografia opzionale) riporterà
armv7l
anche se ARMv8. Quindi ‘ sono abbastanza sicuro che verrà segnalata la CPU sbagliata. - @jww Se riporta
armv7l
, significa che ‘ stai utilizzando un kernel a 32 bit. È possibile eseguire un kernel a 32 bit su una CPU a 64 bit. Se desideri informazioni sulla CPU, leggi/proc/cpuinfo
. - uname -m restituisce solo ” aarch64 “. / proc / cpuinfo non ‘ t contiene sempre un nome per un processore.
Risposta
Come sottolinea Richard, armv7
le varianti sono tutte a 32 bit, quindi non esiste unetichetta 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 in modo definitivo” perché è possibile eseguire eseguibili a 32 bit su un sistema a 64 bit.
Non sembra esserci nulla di infallibile in /proc
o /sys
; loutput di /proc/cpuinfo
potrebbe 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, inclusi “modello”, “famiglia cpu”, ecc. Sembrano opzionali – non lo fanno ” non mi appare affatto su un processore ARMv6 Broadcom 2708).
Commenti
- Quindi armv7l è a 32 bit giusto?
- @bakalolo Leggi lentamente la domanda e la risposta accettata;)
Risposta
Installa il pacchetto “lshw” .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Risposta
Sembra che la maggior parte dei modi per vedere il conteggio dei bit sia in qualche modo sappi che arm7 = 32 bit e anche se potrebbe essere vero ma per quanto riguarda
pi@rpi9:~ $ getconf LONG_BIT 32
E se vuoi cercare il modello di cpu io 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
Commenti
- getconf LONG_BIT è molto semplice
Risposta
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 dellindirizzo è void*
.
Commenti
-
sizeof
restituiscesize_t
che deve essere stampato utilizzando%zu
. Luso di un identificatore di formato errato richiama un comportamento indefinito - e la dimensione di void * non è ‘ necessariamente la larghezza di bit dellarchitettura. Hai mai sentito parlare di x32 ABI sites.google.com/site/x32abi
- Allo stesso modo, getconf -a | grep LONG_BIT
- Questo ‘ non ti dice niente di diverso dalla natura del tuo compilatore .
Risposta
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à (700 mhz).
Quindi no, può essere a 64 bit. Solo il sistema operativo potrebbe essere 32.
Commenti
- dove hai scoperto che lOP ‘ utilizza Allwinner H8? Larchitettura è armv7l che chiaramente non è un Uno a 64 bit
- È ‘ meglio dimostrare un modo per trovare le informazioni desiderate allinterno del sistema invece di utilizzare un terzo -informazioni di parti da fonti esterne. Questo è più adatto per essere un commento che una risposta (quindi tutti i voti negativi).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
egcc -v
? Potrebbero essere utili.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.2 F32-bit_architecture