onder een intel weet ik dat ik de uitkomst van uname -m
kan bekijken om te weten of mijn besturingssysteem 32 is of 64 bit, maar onder ARM geeft dit:
armv7l
Ik heb afgeleid uit
file /usr/bin/ls
dat ik “een 32-bits besturingssysteem gebruik, maar hoe kan ik dit op een gemakkelijkere manier weten?
Opmerkingen
- arm 7 is 32-bits .
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipedia - @richard Dat vermoedde ik al, maar wat is dan de naam van de 64-bits variant?
- Ik don ‘ hebben geen toegang tot een ARM-machine, maar wat is de output van
uname -a
engcc -v
? Die kunnen nuttig zijn. -
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 was de laatste van de 32-bits cpu die naar 64-bits ging (met uitzondering van degenen die stierven). De meesten gingen 64-bits en gingen vervolgens dood, vanwege slechte marketing – ervan uitgaande dat b etter is genoeg. De Intel x86 was de een na laatste, hoewel AMD 64 bit toevoegde.
Antwoord
Daar zijn verschillende gradaties, aangezien u een 32-bits of gemengd besturingssysteem kunt draaien op een 64-bits-compatibele CPU. Zie 64-bit kernel, maar alle 32-bit ELF uitvoerbare actieve processen, hoe is dit? voor een gedetailleerde bespreking (geschreven voor x86, maar het meeste is van toepassing om ook in te schakelen).
U kunt het processormodel vinden in /proc/cpuinfo
. Bijvoorbeeld:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (en lager) is 32-bits. ARMv8 introduceert de 64-bits instructieset.
Als je wilt zien of je systeem 64-bits binaire bestanden ondersteunt, controleer dan de kernelarchitectuur :
$ uname -m armv7l
Op een 64-bits processor “zou je een string zien die begint met armv8
(of hoger ) als het uname
-proces zelf een 32-bits proces is, of aarch64
als het een 64-bits proces is. (Zie ook https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Opmerkingen
- Ik wil je antwoord niet ‘ betwisten, maar helaas IS Android EEN LINUX, dus er veronderstelt dat er ergens een commando is dat het lokaal laat zien en niet om een documentatie op een bepaalde pagina
- @THESorcerer Android gebruikt een Linux-kernel, maar het is geen Linux-systeem. Het heeft geen landtools voor Linux-gebruikers (slechts een zeer kleine subset). Op Android denk ik dat 64-bit-ondersteuning consistent is in het basis-besturingssysteem, dus
cat /proc/$$/maps
zal je laten weten of het systeem 64-bit of 32-bit is vanaf een adb-opdrachtregel. - Ik geloof dat Raspberry Pi 3, wat ARMv8 is (CRC, geen optionele Crypto),
armv7l
zal rapporteren, ook al is ARMv8. Dus ik ‘ ben er vrij zeker van dat de verkeerde CPU zal worden gerapporteerd. - @jww Als het
armv7l
rapporteert, betekent dat je ‘ een 32-bit kernel draait. U kunt een 32-bits kernel uitvoeren op een 64-bits CPU. Als je informatie over de CPU wilt, lees dan/proc/cpuinfo
. - uname -m retourneert alleen ” aarch64 “. / proc / cpuinfo bevat ook niet ‘ t altijd een naam voor een processor.
Antwoord
Zoals Richard opmerkt, armv7
varianten zijn allemaal 32-bits, dus er is geen overbodig label armv7-32
, etc.
Op een linux-systeem kun je gemakkelijk, hoewel niet echt definitief, controleren door een algemeen uitvoerbaar bestand te onderzoeken:
> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...
Ik zeg “niet definitief” omdat het mogelijk is om 32-bits uitvoerbare bestanden op een 64-bits systeem uit te voeren.
Er lijkt niets onfeilbaars te zijn in /proc
of /sys
; de uitvoer van /proc/cpuinfo
kan enkele belangrijke aanwijzingen geven. Als je om de een of andere reden een geautomatiseerde controle nodig hebt, lijkt het maken van een tabel die is toegewezen aan het veld “modelnaam” een mogelijk goede methode (andere velden, waaronder “model”, “cpu-familie”, enz. Zien er optioneel uit – dat doen ze niet ” t verschijnen helemaal niet voor mij op een Broadcom 2708 ARMv6-processor).
Reacties
- Dus armv7l is 32 bit juist?
- @bakalolo Lees de vraag en het geaccepteerde antwoord langzaam;)
Antwoord
Installeer het “lshw” -pakket .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Antwoord
Het lijkt erop dat de meeste manieren om het aantal bits te zien op de een of andere manier zijn weet dat arm7 = 32 bit en hoewel dat waar kan zijn, maar hoe zit het met
pi@rpi9:~ $ getconf LONG_BIT 32
En als je naar het cpu-model wilt zoeken, gebruik ik normaal gesproken 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
Reacties
- getconf LONG_BIT is erg rechttoe rechtaan
Antwoord
Probeer het volgende.
// -*- 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; }
De adresgrootte is void*
.
Reacties
-
sizeof
retourneertsize_t
die moet worden afgedrukt met%zu
. Het gebruik van de verkeerde formaatspecificatie roept ongedefinieerd gedrag op - en de grootte van void * isn ‘ t noodzakelijkerwijs de bitbreedte van de architectuur. Heeft u ooit gehoord van x32 ABI sites.google.com/site/x32abi
- Op dezelfde manier, getconf -a | grep LONG_BIT
- Dit zegt ‘ niets anders dan de aard van je compiler .
Answer
Nee, het is een 64-bits computer. Het is een Allwinner H8 , heks is een dubbele ARM-7. 8 cores, 64 bits, powervr, sgx 544, met dubbele snelheid (700 mhz).
Dus nee, het kan 64 bit zijn. Alleen het besturingssysteem zou 32 kunnen zijn.
Opmerkingen
- waar heb je gevonden dat de OP ‘ s die Allwinner H8 gebruiken? De architectuur is armv7l, wat duidelijk geen 64-bits versie
- Het ‘ is beter om een manier te demonstreren om de gewenste informatie van binnen het systeem te vinden in plaats van een derde -party-informatie uit externe bronnen. Dit is beter geschikt om een opmerking te zijn dan een antwoord (vandaar alle neerwaartse stemmen).