czy mój Linux ARM 32 lub 64 bit?


60

pod informacją wiem, że mogę spojrzeć na wynik, uname -maby dowiedzieć się, czy mój system operacyjny jest 32 czy 64-bitowy, ale w przypadku ARM daje to:

armv7l

Wydedukowałem z

file /usr/bin/ls

że korzystam z 32-bitowego systemu operacyjnego, ale skąd mogę to wiedzieć w łatwiejszy sposób?


3
ramię 7 ma 32 bity. ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.- wikipedia
ctrl-alt-delor

@richard Zgadywałem, ale jaka jest nazwa 64-bitowego wariantu?
Chris Maes,

1
Nie mam dostępu do maszyny ARM, ale jaka jest wydajność uname -ai gcc -v? Te mogą być pomocne.
terdon

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.2F32-bit_architecture
ctrl-alt-delor

Arm był ostatnim z 32-bitowego procesora, który przeszedł na 64-bitowy (z wyłączeniem tych, które zginęły). Większość przeszła na 64-bit, a potem zmarła z powodu złego marketingu - zakładając, że bycie lepszym wystarczy. Intel x86 był drugi do ostatniego, choć to AMD dodało 64-bit.
ctrl-alt-delor

Odpowiedzi:


74

Istnieje kilka stopni, ponieważ można uruchomić 32-bitowy lub mieszany system operacyjny na procesorze obsługującym 64-bit. Zobacz 64-bitowe jądro, ale jak działają wszystkie 32-bitowe pliki wykonywalne ELF? do szczegółowej dyskusji (napisanej dla x86, ale większość dotyczy również uzbrojenia).

Możesz znaleźć model procesora w /proc/cpuinfo. Na przykład:

$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)

ARMv7 (i poniżej) jest 32-bitowy. 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

W 64-bitowym procesorze zobaczysz ciąg rozpoczynający się od armv8(lub powyżej), jeśli unamesam proces jest procesem 32-bitowym lub aarch64jeśli jest to proces 64-bitowy. (Zobacz także https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )


2
Nie podważam twojej odpowiedzi, ale niestety android JEST LINUX, więc przypuszczam, że będzie jakieś polecenie, GŁÓWNIE, które pokazuje je lokalnie i nie czyta dokumentacji na jakiejś stronie
TESorcerer

1
@THESorcerer Android używa jądra Linuksa, ale nie jest to system Linux. Nie ma on narzędzi do lądowania dla użytkowników Linuksa (tylko bardzo mały podzbiór). Na Androidzie myślę, że obsługa 64-bitowa jest spójna w podstawowym systemie operacyjnym, więc cat /proc/$$/mapspoinformuję cię, czy system jest 64-bitowy czy 32-bitowy z wiersza poleceń adb.
Gilles

3
Wierzę, że Raspberry Pi 3, czyli ARMv8 (CRC, brak opcjonalnego Crypto), zgłosi raport, armv7lmimo że ARMv8. Jestem więc prawie pewien, że zgłoszony zostanie niewłaściwy procesor.

1
@jww Jeśli to zgłosi armv7l, oznacza to, że używasz jądra 32-bitowego. Możesz uruchomić 32-bitowe jądro na 64-bitowym procesorze. Jeśli chcesz uzyskać informacje o procesorze, przeczytaj /proc/cpuinfo.
Gilles,

uname -m zwraca tylko „aarch64”. / proc / cpuinfo nie zawsze zawiera nazwę procesora.
Halsafar

23

Jak zauważa Richard, armv7wszystkie warianty są 32-bitowe, więc nie ma zbędnej etykiety armv7-32itp.

W systemie Linux możesz łatwo, choć nie do końca, sprawdzić, sprawdzając wspólny plik wykonywalny:

> which bash
/bin/bash
> file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...

Mówię „nie definitywnie”, ponieważ możliwe jest uruchamianie 32-bitowych plików wykonywalnych w systemie 64-bitowym.

Wydaje się, że nie ma nic niezawodnego w /proclub /sys; wyjście z /proc/cpuinfo może dostarczyć pewnych znaczących wskazówek. Jeśli z jakiegoś powodu potrzebujesz automatycznego sprawdzania, utworzenie tabeli odwzorowanej na pole „nazwa modelu” wydaje się być jedną potencjalnie solidną metodą (inne pola, w tym „model”, „rodzina procesorów” itp. Wyglądają opcjonalnie - nie dają w ogóle pojawiają się dla mnie na procesorze Broadcom 2708 ARMv6).


Więc armv7l ma 32 bity, prawda?
bakalolo

1
@bakalolo Przeczytaj pytanie i zaakceptowaną odpowiedź powoli;)
goldilocks

11

Zainstaluj pakiet „lshw”.

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...

3

Wydaje się, że większość sposobów sprawdzania liczby bitów polega na tym, aby wiedzieć, ż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

getconf LONG_BIT jest bardzo prosty
Abdulkarim Kanaan

1

Spróbuj wykonać następujące czynności.

// -*- 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*.


1
sizeofzwroty, size_tktóre należy wydrukować za pomocą%zu . Użycie niewłaściwego specyfikatora formatu wywołuje niezdefiniowane zachowanie
phuclv

i rozmiar void * niekoniecznie musi być szerokością bitową architektury. Czy kiedykolwiek słyszałeś o x32 ABI sites.google.com/site/x32abi
phuclv

Podobnie, getconf -a | grep LONG_BIT
kaiwan

2
Nie mówi to nic o naturze twojego kompilatora .
rsethc

-5

Nie, to komputer 64-bitowy. To Allwinner H8, wiedźma jest podwójnym 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.


gdzie odkryłeś, że OP używa Allwinner H8? Architektura to armv7l, który najwyraźniej nie jest 64-bitowy
phuclv

Lepiej wykazać sposób, aby znaleźć żądane informacje z wewnątrz systemu, zamiast korzystania z informacji osób trzecich ze źródeł zewnętrznych. To lepiej nadaje się na komentarz niż odpowiedź (stąd wszystkie głosy negatywne).
Synetech
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.