é o meu linux ARM 32 ou 64 bits?

60

sob um intel eu sei que posso olhar para o resultado de uname -msaber se meu sistema operacional é 32 ou 64 bits, mas sob ARM isso dá:

armv7l

Deduzi de

file /usr/bin/ls

que eu estou em um sistema operacional de 32 bits, mas como posso saber isso de uma maneira mais fácil?

Chris Maes
fonte
3
o braço 7 é de 32 bits. 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 Eu acho que sim, mas qual é o nome da variante de 64 bits?
Chris Maes
11
Não tenho acesso a uma máquina ARM, mas qual é a saída uname -ae gcc -v? Isso pode ser útil.
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 foi o último dos processadores de 32 bits a ir para 64 bits (excluindo os que morreram). A maioria foi de 64 bits e depois morreu, por causa do marketing ruim - assumindo que ser melhor é suficiente. O Intel x86 foi o penúltimo, embora tenha sido a AMD que adicionou 64 bits.
Ctrl-alt-delor

Respostas:

75

Existem várias gradações, pois você pode executar um sistema operacional misto de 32 bits em uma CPU com capacidade de 64 bits. Veja o kernel de 64 bits, mas todos os processos executáveis ​​ELF de 32 bits, como é isso? para uma discussão detalhada (escrita para x86, mas a maioria se aplica também ao braço).

Você pode encontrar o modelo do processador em /proc/cpuinfo. Por exemplo:

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

O ARMv7 (e abaixo) é de 32 bits. O ARMv8 apresenta o conjunto de instruções de 64 bits.

Se você deseja ver se o seu sistema suporta binários de 64 bits, verifique a arquitetura do kernel:

$ uname -m
armv7l

Em um processador de 64 bits, você verá uma sequência iniciada por armv8(ou acima) se o unameprocesso em si for de 32 bits ou aarch64se for de 64 bits. (Consulte também https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Gilles 'SO- parar de ser mau'
fonte
2
Eu não contestar a sua resposta, mas infelizmente Android é um Linux, portanto, não suposto ser algum comando, em algum lugar que mostrá-lo localmente e não para ler uma documentação em alguma página
THESorcerer
11
@THESorcerer O Android usa um kernel Linux, mas não é um sistema Linux. Ele não possui ferramentas terrestres de usuário do Linux (apenas um subconjunto muito pequeno). No Android, acho que o suporte a 64 bits é consistente no sistema operacional base, portanto cat /proc/$$/maps, você saberá se o sistema é de 64 ou 32 bits a partir de uma linha de comando adb.
Gilles 'SO- stop be evil'
3
Acredito que o Raspberry Pi 3, que é o ARMv8 (CRC, sem criptografia opcional) relatará, armv7lmesmo que o seu ARMv8. Então, eu tenho certeza que a CPU errada será relatada.
11
@jww Se reportar armv7l, significa que você está executando um kernel de 32 bits. Você pode executar um kernel de 32 bits em uma CPU de 64 bits. Se você quiser informações sobre a CPU, leia /proc/cpuinfo.
Gilles 'SO- stop be evil'
uname -m apenas retorna "aarch64". / proc / cpuinfo também nem sempre contém um nome para um processador.
Halsafar 04/09
23

Como richard aponta, as armv7variantes são todas de 32 bits, portanto não há rótulo redundante armv7-32etc.

Em um sistema Linux, você pode verificar facilmente, embora não de maneira definitiva, examinando um executável comum:

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

Eu digo "não definitivamente" porque é possível executar executáveis ​​de 32 bits em um sistema de 64 bits.

Não parece haver nada infalível em /procou /sys; a saída de /proc/cpuinfo pode fornecer algumas dicas significativas. Se, por algum motivo, você precisar de uma verificação automatizada, a criação de uma tabela mapeada para o campo "nome do modelo" parecerá um método potencialmente sólido (outros campos, incluindo "modelo", "família de CPUs" etc.) parecerão opcionais - eles não não aparece para mim em um processador Broadcom 2708 ARMv6).

Cachinhos Dourados
fonte
Então armv7l tem 32 bits, certo?
bakalolo
11
@bakalolo Leia a pergunta e a resposta aceita lentamente;) #
goldilocks
11

Instale o pacote 'lshw'.

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

Parece que a maioria das maneiras de ver a contagem de bits é de alguma forma saber que arm7 = 32 bits e enquanto isso pode ser verdade, mas e quanto a

pi@rpi9:~ $ getconf LONG_BIT
32

E se você quiser procurar o modelo da CPU, eu normalmente uso o 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
lpaseen
fonte
getconf LONG_BIT é muito direto
Abdulkarim Kanaan
1

Tente o seguinte.

// -*- 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;
}

O tamanho do endereço é void*.

ceving
fonte
11
sizeofretornos size_tque devem ser impressos usando%zu . Usando o especificador formato errado invoca um comportamento indefinido
phuclv
e o tamanho do void * não é necessariamente a largura do bit da arquitetura. Você já ouviu falar de x32 ABI sites.google.com/site/x32abi
phuclv
Da mesma forma, getconf -a | grep LONG_BIT
kaiwan
2
Isso não informa sobre nada além da natureza do seu compilador .
rsethc
-5

Não, é um computador de 64 bits. É um Allwinner H8, o bruxo é um ARM-7 duplo. 8 núcleos, 64 bits, powervr, sgx 544, em velocidade dupla (700mhz).

Portanto, não, é capaz de ser de 64 bits. Apenas o sistema operacional pode ter 32 anos.

Jaap Daniels
fonte
onde você descobriu que o OP está usando o Allwinner H8? A arquitetura é armv7l que não é claramente um 64-bit um
phuclv
É melhor demonstrar uma maneira de encontrar as informações desejadas de dentro do sistema, em vez de usar informações de terceiros de fontes externas. Isso é mais adequado para ser um comentário do que uma resposta (daí todos os votos negativos).
Synetech 20/09