under et intel jeg vet at jeg kan se på resultatet av uname -m
for å vite om operativsystemet mitt er 32 eller 64 bit, men under ARM gir dette:
armv7l
Jeg har trukket ut fra
file /usr/bin/ls
at jeg er på et 32-biters operativsystem, men hvordan kan jeg vite dette på en enklere måte?
Kommentarer
Svar
Der er flere graderinger, siden du kan kjøre et 32-biters eller blandet operativsystem på en 64-biters CPU. Se 64-biters kjerne, men alle 32-biters ELF-kjørbare prosesser, hvordan er dette? for en detaljert diskusjon (skrevet for x86, men det meste gjelder å arme også).
Du finner prosessormodellen i /proc/cpuinfo
. For eksempel:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (og under) er 32-bit. ARMv8 introduserer 64-biters instruksjonssett.
Hvis du vil se om systemet ditt støtter 64-bits binærfiler, sjekk kjernearkitekturen :
$ uname -m armv7l
På en 64-biters prosessor ser du en streng som begynner med armv8
(eller over ) hvis uname
selve prosessen er en 32-biters prosess, eller aarch64
hvis den er en 64-biters prosess. (Se også https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Kommentarer
- Jeg ikke ‘ t bestrider svaret ditt, men dessverre er android EN LINUX, så antar det å være noen kommando, NÅGONS som viser det lokalt og ikke å lese en dokumentasjon på noen side
- @THESorcerer Android bruker en Linux-kjerne, men det er ikke et Linux-system. Den har ikke Linux-brukerverktøy (bare et veldig lite delmengde). På Android tror jeg 64-biters støtte er konsistent i grunn-OS, så
cat /proc/$$/maps
vil fortelle deg 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
selv om det er ARMv8. Så jeg ‘ er ganske sikker på at feil CPU vil bli rapportert. - @jww Hvis den rapporterer
armv7l
, er det betyr at du ‘ kjører en 32-biters kjerne. Du kan kjøre en 32-biters kjerne på en 64-biters CPU. Hvis du vil ha informasjon om CPUen, kan du lese/proc/cpuinfo
. - uname -m returnerer bare » aarch64 «. / proc / cpuinfo inneholder ikke ‘ t alltid et navn på en prosessor.
Svar
Som richard påpeker, armv7
varianter er alle 32-bit, så det er ingen overflødig etikett armv7-32
osv.
På et linux-system kan du enkelt, men ikke helt definitivt, sjekke ved å undersøke en vanlig kjørbar:
> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...
Jeg sier «ikke definitivt» fordi det er mulig å kjøre 32-bits kjørbare filer på et 64-biters system.
Det ser ikke ut til å være noe idiotsikkert i /proc
eller /sys
; produksjonen fra /proc/cpuinfo
kan gi noen viktige ledetråder. Hvis du av en eller annen grunn trenger en automatisk sjekk, virker det som en potensiell lydmetode å lage en tabell som er kartlagt til «modellnavn» -feltet (andre felt, inkludert «modell», «CPU-familie» osv. Ser valgfrie ut – de har ikke » t vises i det hele tatt for meg på en Broadcom 2708 ARMv6-prosessor).
Kommentarer
- Så armv7l er 32 bit riktig?
- @bakalolo Les spørsmålet og det aksepterte svaret sakte;)
Svar
Installer «lshw» -pakken .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Svar
Virker som de fleste måter å se bitantal er på en eller annen måte vet at arm7 = 32 bit og selv om det kan være sant, men hva med
pi@rpi9:~ $ getconf LONG_BIT 32
Og hvis du vil se etter CPU-modellen, bruker jeg vanligvis 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 veldig grei
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 må skrives ut med%zu
. Ved å bruke feil format angir påkrevd udefinert oppførsel - og størrelsen på ugyldig * er ikke ‘ t nødvendigvis arkitekturbitbredden. Har du noen gang hørt om x32 ABI sites.google.com/site/x32abi
- Tilsvarende getconf -a | grep LONG_BIT
- Dette forteller ikke ‘ deg om noe annet enn arten til kompilatoren din .
Svar
Nei det er en 64-bits datamaskin. Det er en Allwinner H8 , heks er en dobbel ARM-7. 8 kjerner, 64 bits, powervr, sgx 544, med dobbel hastighet (700mhz).
Så nei, den kan være 64 bit. Bare operativsystemet kan være 32.
Kommentarer
- hvor fant du ut at OP ‘ bruker Allwinner H8? Arkitekturen er armv7l som tydeligvis ikke er en 64-bit en
- Det ‘ er bedre å demonstrere en måte å finne ønsket informasjon fra i systemet i stedet for å bruke tredje -informasjon om partier fra eksterne kilder. Dette er bedre egnet til å være en kommentar enn et svar (derav alle nedstemmene).
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.
– en.wikipedia.org/wiki/ARM_architecture#64.2 F32-bit_arkitektur