pod informacjami wywiadowczymi Wiem, że mogę spojrzeć na wynik uname -m
, aby wiedzieć, czy mój system operacyjny ma 32 lata, czy 64-bitowy, ale pod ARM daje to:
armv7l
Wyprowadziłem z
file /usr/bin/ls
że pracuję na 32-bitowym systemie operacyjnym, ale jak mogę to sprawdzić w łatwiejszy sposób?
Komentarze
Odpowiedź
Tam jest kilka stopni, ponieważ można uruchomić 32-bitowy lub mieszany system operacyjny na 64-bitowym procesorze. Zobacz Jądro 64-bitowe, ale wszystkie uruchomione procesy 32-bitowego ELF, jak to jest? , aby uzyskać szczegółowe omówienie (napisane dla x86, ale większość z nich ma zastosowanie do uzbrojenia).
Model procesora można znaleźć w /proc/cpuinfo
. Na przykład:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (i poniżej) jest 32-bitowe. ARMv8 wprowadza 64-bitowy zestaw instrukcji.
Jeśli chcesz sprawdzić, czy Twój system obsługuje 64-bitowe pliki binarne, sprawdź architekturę jądra :
$ uname -m armv7l
Na 64-bitowym procesorze zobaczysz ciąg zaczynający się od armv8
(lub powyżej ) jeśli sam proces uname
jest procesem 32-bitowym, lub aarch64
, jeśli jest to proces 64-bitowy. (Zobacz także https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Komentarze
- Nie ' nie kwestionuję Twojej odpowiedzi, ale niestety Android JEST LINUXEM, więc przypuszczam, że jest jakieś polecenie, GDZIEŚ, które pokazują to lokalnie i nie czyta dokumentacja na jakiejś stronie
- @THESorcerer Android używa jądra Linux, ale nie jest to system Linux. Nie ma narzędzi lądowych użytkownika Linuksa (tylko bardzo mały podzbiór). Myślę, że w systemie Android obsługa wersji 64-bitowej jest spójna w podstawowym systemie operacyjnym, więc
cat /proc/$$/maps
poinformuje Cię, czy system jest 64-bitowy, czy 32-bitowy, z wiersza poleceń adb. - Wierzę, że Raspberry Pi 3, które jest ARMv8 (CRC, bez opcjonalnego Crypto), zgłosi
armv7l
, mimo że jego ARMv8. Więc ' jestem prawie pewien, że zostanie zgłoszony niewłaściwy procesor. - @jww Jeśli zgłasza
armv7l
, oznacza, że ' korzystasz z 32-bitowego jądra. Możesz uruchomić jądro 32-bitowe na 64-bitowym procesorze. Jeśli potrzebujesz informacji o procesorze, przeczytaj/proc/cpuinfo
. - uname -m zwraca po prostu ” aarch64 „. / proc / cpuinfo nie ' t też zawsze zawiera nazwę procesora.
Odpowiedź
Jak wskazuje Richard, armv7
warianty są 32-bitowe, więc nie ma zbędnej etykiety armv7-32
itp.
W systemie linuxowym możesz łatwo, choć nie do końca, sprawdzić, sprawdzając typowy plik wykonywalny:
> which bash /bin/bash > file /bin/bash /bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...
Mówię „nie do końca”, ponieważ możliwe jest uruchamianie 32-bitowych plików wykonywalnych w systemie 64-bitowym.
W /proc
lub /sys
; dane wyjściowe z /proc/cpuinfo
mogą dostarczyć ważnych wskazówek. Jeśli z jakiegoś powodu potrzebujesz automatycznego sprawdzenia, utworzenie tabeli odwzorowanej na pole „nazwa modelu” wydaje się jedną z możliwych metod (inne pola, w tym „model”, „rodzina procesorów” itp. Wyglądają na opcjonalne – nie są) nie pojawiają się w ogóle na procesorze Broadcom 2708 ARMv6).
Komentarze
- Więc armv7l jest 32-bitowy, prawda?
- @bakalolo Przeczytaj powoli pytanie i zaakceptowaną odpowiedź;)
Odpowiedź
Zainstaluj pakiet „lshw” .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Odpowiedź
Wydaje się, że większość sposobów sprawdzenia liczby bitów wiem, że arm7 = 32 bity i chociaż może to być prawda, ale co z
pi@rpi9:~ $ getconf LONG_BIT 32
A jeśli chcesz poszukać modelu procesora, zwykle używam 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
Komentarze
- getconf LONG_BIT jest bardzo proste
Odpowiedź
Wypróbuj następujące rozwiązania.
// -*- 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; }
Rozmiar adresu to void*
.
Komentarze
-
sizeof
zwracasize_t
, które należy wydrukować za pomocą%zu
. Użycie niewłaściwego specyfikatora formatu wywołuje niezdefiniowane zachowanie - i rozmiar void * nie ' musi koniecznie odpowiadać szerokości bitowej architektury. Czy kiedykolwiek słyszałeś o x32 ABI sites.google.com/site/x32abi
- Podobnie, getconf -a | grep LONG_BIT
- To nie ' nie mówi o niczym innym niż o naturze twojego kompilatora .
Odpowiedź
Nie, to komputer 64-bitowy. To Allwinner H8 , wiedźma to podwójne ARM-7. 8 rdzeni, 64 bity, powervr, sgx 544, przy podwójnej prędkości (700 MHz).
Więc nie, może być 64-bitowy. Tylko system operacyjny może mieć 32.
Komentarze
- gdzie okazało się, że OP ' używają Allwinner H8? Architektura to armv7l, co wyraźnie nie jest 64-bitowy
- Lepiej jest ' zademonstrować sposób na znalezienie żądanych informacji z wewnątrz systemu, zamiast używać trzeciego -informacje o firmie ze źródeł zewnętrznych. Lepiej nadaje się jako komentarz niż odpowiedź (stąd wszystkie głosy negatywne).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
igcc -v
? Te mogą być pomocne.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