är min linux ARM 32 eller 64 bitar?

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

  • arm 7 är 32 bitar . ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic. – wikipedia
  • @richard Jag gissade så, men vad heter 64-bitarsversionen då?
  • I don ’ t har åtkomst till en ARM-maskin men vad är utdata från uname -a och gcc -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
  • Arm var den sista av 32-bitars cpu som gick 64 bitar (exklusive de som dog). De flesta gick 64 bitar och dog sedan på grund av dålig marknadsföring – förutsatt att de var b etter är nog. Intel x86 var den näst sista, men det var AMD som lade till 64 bitar.

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

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).

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *