under ett intel vet jag att jag kan titta på resultatet av uname -m
för att veta om mitt operativsystem är 32 eller 64 bitar, men under ARM ger detta:
armv7l
Jag drog slutsatsen från
file /usr/bin/ls
att jag är på ett 32-bitars operativsystem, men hur kan jag veta detta på ett enklare sätt?
Kommentarer
Svar
Där är flera grader, eftersom du kan köra ett 32-bitars eller blandat operativsystem på en 64-bitars CPU. Se 64-bitars kärna, men alla 32-bitars ELF-körbara processer, hur är det? för en detaljerad diskussion (skriven för x86, men det mesta gäller att aktivera också).
Du hittar processormodellen i /proc/cpuinfo
. Till exempel:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (och nedan) är 32-bitars. ARMv8 introducerar 64-bitars instruktionsuppsättning.
Om du vill se om ditt system stöder 64-bitars binärer, kontrollera kärnarkitekturen :
$ uname -m armv7l
På en 64-bitars processor ser du en sträng som börjar med armv8
(eller högre ) om uname
-processen i sig är en 32-bitarsprocess, eller aarch64
om den är en 64-bitarsprocess. (Se även https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Kommentarer
- Jag tävlar inte ’ ditt svar, men tyvärr är android EN LINUX, så det antas att det finns något kommando, NÅGONSOM som visar det lokalt och inte läser en dokumentation på någon sida
- @THESorcerer Android använder en Linux-kärna men det är inte ett Linux-system. Det har inte Linux-användarverktyg (endast en mycket liten delmängd). På Android tror jag att 64-bitars stöd är konsekvent i bas-OS, så
cat /proc/$$/maps
kommer att låta dig veta om systemet är 64-bitars eller 32-bitars från en ADB-kommandorad. - Jag tror att Raspberry Pi 3, som är ARMv8 (CRC, ingen valfri Crypto) kommer att rapportera
armv7l
även om det är ARMv8. Så jag ’ är ganska säker på att fel CPU kommer att rapporteras. - @jww Om den rapporterar
armv7l
är det betyder att du ’ kör en 32-bitars kärna. Du kan köra en 32-bitars kärna på en 64-bitars CPU. Om du vill ha information om processorn läser du/proc/cpuinfo
. - uname -m returnerar bara ” aarch64 ”. / proc / cpuinfo innehåller inte ’ t alltid ett namn för en processor.
Svar
Som Richard påpekar är armv7
varianter alla 32-bitars, så det finns ingen överflödig etikett armv7-32
osv.
På ett Linux-system kan du enkelt, men inte riktigt definitivt, kontrollera genom att undersöka en gemensam körbar:
> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...
Jag säger ”inte definitivt” eftersom det är möjligt att köra 32-bitars körbara filer på ett 64-bitars system.
Det verkar inte finnas något idiotsäkert i /proc
eller /sys
; utdata från /proc/cpuinfo
kan ge några betydande ledtrådar. Om du av någon anledning behöver en automatisk kontroll, verkar det som en potentiellt sund metod att skapa en tabell mappad till ”modellnamn” -fältet (andra fält, inklusive ”modell”, ”cpu-familj” osv. Ser frivilliga ut – de är inte ” t visas alls för mig på en Broadcom 2708 ARMv6-processor).
Kommentarer
- Så armv7l är 32 bitar rätt?
- @bakalolo Läs frågan och det accepterade svaret långsamt;)
Svar
Installera ”lshw” -paketet .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Svar
Verkar som de flesta sätt att se bitantal är på något sätt vet att arm7 = 32 bitar och även om det kan vara sant men vad sägs om
pi@rpi9:~ $ getconf LONG_BIT 32
Och om du vill leta efter cpu-modellen använder jag normalt 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
Kommentarer
- getconf LONG_BIT är väldigt enkelt
Svar
Försök med följande.
// -*- 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; }
Adressstorleken är void*
.
Kommentarer
-
sizeof
returnerarsize_t
som måste skrivas ut med%zu
. Med fel formatspecifikator åberopas odefinierat beteende - och storleken på void * är inte ’ t nödvändigtvis arkitekturbredden. Har du någonsin hört talas om x32 ABI sites.google.com/site/x32abi
- På samma sätt getconf -a | grep LONG_BIT
- Detta berättar inte ’ om något annat än arten av din kompilator .
Svar
Nej, det är en 64-bitars dator. Det är en Allwinner H8 , häxan är en dubbel ARM-7. 8 kärnor, 64 bitar, powervr, sgx 544, vid dubbel hastighet (700mhz).
Så nej, den kan vara 64 bitar. Bara operativsystemet kan vara 32.
Kommentarer
- var tyckte du att OP ’ använder Allwinner H8? Arkitekturen är armv7l vilket helt klart inte är en 64-bitars en
- Det ’ är bättre att visa ett sätt att hitta önskad information från inom systemet istället för att använda tredje -information från externa källor. Detta är bättre lämpligt för att vara en kommentar än ett svar (alltså alla ned-röster).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
ochgcc -v
? Det kan vara till hjälp.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