czy mój Linux ARM jest 32 czy 64 bitowy?

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

  • ramię 7 jest 32-bitowe . ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic. – wikipedia
  • @richard Tak się spodziewałem, ale jak nazywa się wariant 64-bitowy?
  • Ja nie ' nie mam dostępu do maszyny ARM, ale jaki jest wynik działania uname -a i gcc -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
  • Arm było ostatnim z 32-bitowych procesorów, które przeszły na 64-bitowe (z wyłączeniem tych, które uległy awarii). Większość przeszła na 64-bitową, a potem umierała z powodu słabego marketingu – zakładając, że etter wystarczy. Intel x86 był przedostatni, chociaż to AMD dodał 64-bitowy.

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

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).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *