er min linux ARM 32 eller 64 bit?

under et intel, jeg ved, at jeg kan se på resultatet af uname -m for at vide, om mit operativsystem er 32 eller 64 bit, men under ARM giver dette:

armv7l 

Jeg har udledt fra

file /usr/bin/ls 

at jeg er på et 32-bit operativsystem, men hvordan kan jeg vide det på en nemmere måde?

Kommentarer

  • arm 7 er 32 bit . ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic. – wikipedia
  • @richard Jeg gætter på det, men hvad hedder så 64-bit-varianten?
  • I don ‘ t har adgang til en ARM-maskine, men hvad er output fra uname -a og gcc -v? Disse kan være nyttige.
  • 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. da.wikipedia.org/wiki/ARM_architecture#64.2 F32-bit_architecture
  • Arm var den sidste af 32bit cpuen, der gik 64bit (eksklusive dem, der døde). De fleste gik 64bit og døde derefter på grund af dårlig markedsføring – forudsat at det var b efter er nok. Intel x86 var den næstsidste, skønt det var AMD, der tilføjede 64 bit.

Svar

Der er flere graderinger, da du kan køre et 32-bit eller blandet operativsystem på en 64-bit-kompatibel CPU. Se 64-bit kerne, men alle 32-bit ELF-eksekverbare kørende processer, hvordan er dette? for en detaljeret diskussion (skrevet til x86, men det meste gælder også til at tilkoble).

Du kan finde processormodellen i /proc/cpuinfo. For eksempel:

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

ARMv7 (og derunder) er 32-bit. ARMv8 introducerer 64-bit instruktionssættet.

Hvis du vil se, om dit system understøtter 64-bit binære filer, skal du kontrollere kernelarkitekturen :

$ uname -m armv7l 

På en 64-bit processor ser du en streng, der starter med armv8 (eller derover ) hvis uname selve processen er en 32-bit proces, eller aarch64 hvis den er en 64-bit proces. (Se også https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Kommentarer

  • Jeg kan ikke ‘ ikke bestride dit svar, men desværre er Android EN LINUX, så der antages at være en kommando, NÅGONSOM der viser det lokalt og ikke læser en dokumentation på en eller anden side
  • @THESorcerer Android bruger en Linux-kerne, men det er ikke et Linux-system. Det har ikke Linux-brugerjordværktøjer (kun en meget lille delmængde). På Android tror jeg, at 64-bit support er konsistent i basis-OS, så cat /proc/$$/maps vil fortælle dig, om systemet er 64-bit eller 32-bit fra en ADB-kommandolinje.
  • Jeg tror, at Raspberry Pi 3, som er ARMv8 (CRC, ingen valgfri Crypto), vil rapportere armv7l, selvom det er ARMv8. Så jeg ‘ er ret sikker på, at den forkerte CPU vil blive rapporteret.
  • @jww Hvis den rapporterer armv7l, er det betyder, at du ‘ kører en 32-bit kerne. Du kan køre en 32-bit kerne på en 64-bit CPU. Hvis du vil have oplysninger om CPUen, skal du læse /proc/cpuinfo.
  • uname -m returnerer bare ” aarch64 “. / proc / cpuinfo indeholder ‘ ikke altid et navn til en processor.

Svar

Som richard påpeger, er armv7 varianter alle 32-bit, så der er ingen overflødig etiket armv7-32 osv.

På et linux-system kan du nemt, selvom det ikke er helt endeligt, kontrollere ved at undersøge en fælles eksekverbar:

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

Jeg siger “ikke endeligt”, fordi det er muligt at køre 32-bit eksekverbare filer på et 64-bit system.

Der ser ikke ud til at være noget idiotsikkert i /proc eller /sys; output fra /proc/cpuinfo kan give nogle signifikante spor. Hvis du af en eller anden grund har brug for en automatiseret kontrol, virker det at oprette en tabel tilknyttet feltet “modelnavn” som en potentielt sund metode (andre felter, herunder “model”, “cpu-familie” osv. Ser valgfri ud – de synes ikke ” t vises overhovedet for mig på en Broadcom 2708 ARMv6-processor).

Kommentarer

  • Så armv7l er 32 bit ret?
  • @bakalolo Læs spørgsmålet og det accepterede svar langsomt;)

Svar

Installer pakken “lshw” .

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

Svar

Ser ud som om de fleste måder at se bitantal er på en eller anden måde ved, at arm7 = 32 bit, og mens det kan være sandt, men hvad med

pi@rpi9:~ $ getconf LONG_BIT 32 

Og hvis du vil kigge efter CPU-modellen, bruger jeg 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 er meget ligetil

Svar

Prøv følgende.

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

Adressestørrelsen er void*.

Kommentarer

Svar

Nej, det er en 64-bit computer. Det er en Allwinner H8 , heks er en dobbelt ARM-7. 8 kerner, 64 bits, powervr, sgx 544, ved dobbelt hastighed (700mhz).

Så nej, det er i stand til at være 64 bit. Bare operativsystemet kan være 32.

Kommentarer

  • hvor fandt du ud af, at OP ‘ bruger Allwinner H8? Arkitekturen er armv7l, som tydeligvis ikke er en 64-bit en
  • Det ‘ er bedre at demonstrere en måde at finde den ønskede information fra inden i systemet i stedet for at bruge tredje -oplysninger fra eksterne kilder. Dette er bedre egnet til at være en kommentar end et svar (dermed alle nedstemninger).

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *