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
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
-
sizeof
returnerersize_t
som skal udskrives ved hjælp af%zu
. Brug af det forkerte format specificerer påberåber udefineret opførsel - og størrelsen på ugyldigheden * er ikke ‘ t nødvendigvis arkitekturbitbredden. Har du nogensinde hørt om x32 ABI sites.google.com/site/x32abi
- Ligeledes getconf -a | grep LONG_BIT
- Dette fortæller dig ikke ‘ om noget andet end arten af din kompilator .
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).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
oggcc -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