pod inteligencí vím, že se mohu podívat na výsledek uname -m
a zjistit, jestli je můj OS 32 nebo 64 bitů, ale pod ARM to dává:
armv7l
Odvodil jsem z
file /usr/bin/ls
že jsem na 32bitovém operačním systému, ale jak to mohu vědět snadněji?
Komentáře
Odpověď
Tady je několik gradací, protože můžete spustit 32bitový nebo smíšený operační systém na 64bitovém procesoru. Viz 64bitové jádro, ale všechny 32bitové spustitelné procesy ELF, jak to funguje? pro podrobnou diskusi (napsáno pro x86, ale většina z nich platí aktivovat také).
Model procesoru najdete v /proc/cpuinfo
. Například:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (a níže) je 32bitový. ARMv8 představuje 64bitovou sadu instrukcí.
Pokud chcete zjistit, zda váš systém podporuje 64bitové binární soubory, zkontrolujte architekturu jádra :
$ uname -m armv7l
Na 64bitovém procesoru uvidíte řetězec začínající armv8
(nebo vyšší) ) pokud je uname
samotný proces 32bitový, nebo aarch64
pokud je to 64bitový proces. (Viz také https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Komentáře
- Nezpochybňuji ‚ tvou odpověď, ale bohužel Android JE LINUX, takže předpokládám, že bude nějaký příkaz, NĚKDEJI, který to lokálně zobrazí a ne číst dokumentace na nějaké stránce
- @THESorcerer Android používá jádro Linuxu, ale nejde o systém Linux. Nemá linuxové uživatelské přistávací nástroje (pouze velmi malá podmnožina). V systému Android si myslím, že 64bitová podpora je v základním OS konzistentní, takže
cat /proc/$$/maps
vám dá vědět, zda je systém 64bitový nebo 32bitový z příkazového řádku adb. - Věřím, že Raspberry Pi 3, což je ARMv8 (CRC, bez volitelného Crypto), bude hlásit
armv7l
i když je to ARMv8. Jsem si tedy ‚ jistý, že bude hlášeno nesprávné CPU. - @jww Pokud hlásí
armv7l
, znamená, že ‚ znovu používáte 32bitové jádro. Můžete spustit 32bitové jádro na 64bitovém procesoru. Pokud chcete informace o CPU, přečtěte si/proc/cpuinfo
. - uname -m pouze vrátí “ aarch64 „. / proc / cpuinfo ‚ vždy neobsahuje název procesoru.
Odpovědět
Jak zdůrazňuje Richard, armv7
varianty jsou všechny 32bitové, takže neexistuje žádný nadbytečný štítek armv7-32
atd.
V systému Linux můžete snadno, i když ne zcela definitivně, zkontrolovat prostudováním běžného spustitelného souboru:
> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...
Říkám „ne definitivně“, protože na 64bitovém systému je možné spustit 32bitové spustitelné soubory.
Zdá se, že v /proc
nebo /sys
; výstup z /proc/cpuinfo
může může poskytnout několik významných vodítek. Pokud z nějakého důvodu potřebujete automatickou kontrolu, vytvoření tabulky namapované na pole „název modelu“ se jeví jako jedna potenciálně zdravá metoda (ostatní pole, včetně „modelu“, „rodiny cpu“ atd., Vypadají volitelně – ne) Na procesoru ARMv6 Broadcom 2708 se pro mě vůbec neobjeví.)
Komentáře
- Takže armv7l má 32 bitů v pořádku?
- @bakalolo Přečtěte si otázku a přijatou odpověď pomalu;)
Odpověď
Nainstalujte balíček „lshw“ .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
odpověď
Zdá se, že většina způsobů, jak zjistit počet bitů, je nějak vězte, že arm7 = 32 bitů a zatímco to může být pravda, ale co
pi@rpi9:~ $ getconf LONG_BIT 32
A pokud chcete hledat model CPU, běžně používám 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
Komentáře
- getconf LONG_BIT je velmi přímočarý
Odpověď
Zkuste následující.
// -*- 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; }
Velikost adresy je void*
.
Komentáře
-
sizeof
vracísize_t
, které je nutné vytisknout pomocí%zu
. Použití nesprávného specifikátoru formátu vyvolá nedefinované chování - a velikost void * isn ‚ t nutně bitová šířka architektury. Už jste někdy slyšeli o x32 ABI sites.google.com/site/x32abi
- Podobně getconf -a | grep LONG_BIT
- To vám ‚ neřekne nic jiného než povahu vašeho kompilátoru .
Odpověď
Ne, je to 64bitový počítač. Je to Allwinner H8 , čarodějnice je dvojitý ARM-7. 8 jader, 64 bitů, powervr, sgx 544, při dvojnásobné rychlosti (700 MHz).
Takže ne, může to být 64 bitů. Jen OS může být 32.
Komentáře
- kde jste zjistili, že OP ‚ používá Allwinner H8? Architektura je armv7l, což zjevně není 64bitový
- ‚ je lepší demonstrovat způsob, jak najít požadované informace ze systému v místo použití třetího -stránkové informace z externích zdrojů. To je vhodnější jako komentář než odpověď (tedy všechny hlasy pro hlasování dolů).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
agcc -v
? To by mohlo být užitečné.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