sob uma inteligência, sei que posso olhar o resultado de uname -m
para saber se meu sistema operacional é 32 ou 64 bits, mas sob ARM isso dá:
armv7l
Eu deduzi de
file /usr/bin/ls
que estou em um sistema operacional de 32 bits, mas como posso saber isso de uma maneira mais fácil?
Comentários
Resposta
Lá Existem várias gradações, já que você pode executar um sistema operacional de 32 bits ou misto em uma CPU com capacidade para 64 bits. Veja kernel de 64 bits, mas todos os processos executáveis ELF de 32 bits, como é isso? para uma discussão detalhada (escrito para x86, mas a maioria se aplica para armar também).
Você pode encontrar o modelo do processador em /proc/cpuinfo
. Por exemplo:
$ cat /proc/cpuinfo Processor : ARMv7 Processor rev 10 (v7l)
ARMv7 (e abaixo) é de 32 bits. ARMv8 apresenta o conjunto de instruções de 64 bits.
Se você deseja ver se o seu sistema oferece suporte a binários de 64 bits, verifique a arquitetura do kernel :
$ uname -m armv7l
Em um processador de 64 bits, você “veria uma string começando com armv8
(ou acima ) se o próprio processo uname
for um processo de 32 bits ou aarch64
se for um processo de 64 bits. (Veja também https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )
Comentários
- Eu não ‘ não contesto sua resposta, mas infelizmente o android É UM LINUX, então, suponha que haja algum comando, EM ALGUM LUGAR, que o mostra localmente e não para ler um documentação em alguma página
- @THESorcerer Android usa um kernel Linux, mas não é um sistema Linux. Ele não possui ferramentas de usuário Linux (apenas um subconjunto muito pequeno). No Android, acho que o suporte de 64 bits é consistente no sistema operacional base, então
cat /proc/$$/maps
informará se o sistema é de 64 bits ou 32 bits a partir de uma linha de comando adb. - Acredito que o Raspberry Pi 3, que é ARMv8 (CRC, sem criptografia opcional), relatará
armv7l
, embora seja ARMv8. Portanto, ‘ tenho certeza de que a CPU errada será relatada. - @jww Se relatar
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
. - uname -m apenas retorna ” aarch64 “. / proc / cpuinfo não ‘ nem sempre contém um nome para um processador.
Resposta
Como richard aponta, armv7
as variantes são todas de 32 bits, portanto não há rótulo redundante armv7-32
, etc.
Em um sistema Linux, você pode facilmente, embora não de forma definitiva, verificar 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 à prova de falhas em /proc
ou /sys
; a saída de /proc/cpuinfo
pode fornecer algumas pistas significativas. Se por algum motivo você precisar de uma verificação automatizada, criar uma tabela mapeada para o campo “nome do modelo” parece um método potencialmente válido (outros campos, incluindo “modelo”, “família de cpu”, etc. parecem opcionais – eles não ” não apareça para mim em um processador Broadcom 2708 ARMv6).
Comentários
- Então armv7l é de 32 bits, certo?
- @bakalolo Leia a pergunta e a resposta aceita lentamente;)
Resposta
Instale o pacote “lshw” .
# lshw ... description: Computer product: Raspberry Pi 3 Model B Rev 1.2 width: 32 bits ...
Resposta
Parece que a maioria das maneiras de ver a contagem de bits é de alguma forma saiba que arm7 = 32 bits e enquanto isso pode ser verdade, mas que tal
pi@rpi9:~ $ getconf LONG_BIT 32
E se você quiser procurar o modelo de 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
Comentários
- getconf LONG_BIT é muito direto
Resposta
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*
.
Comentários
-
sizeof
retornasize_t
que deve ser impresso usando%zu
. Usar o especificador de formato incorreto invoca um comportamento indefinido - e o tamanho de void * isn ‘ t necessariamente a largura de bits da arquitetura. Você já ouviu falar de x32 ABI sites.google.com/site/x32abi
- Da mesma forma, getconf -a | grep LONG_BIT
- Isso não ‘ diz a você sobre nada além da natureza do seu compilador .
Resposta
Não, é um computador de 64 bits. É um Allwinner H8 , a bruxa é um ARM-7 duplo. 8 núcleos, 64 bits, powervr, sgx 544, em velocidade dupla (700 MHz).
Portanto, não, é capaz de ser de 64 bits. Apenas o sistema operacional pode ser 32.
Comentários
- onde você descobriu que os OP ‘ s usando Allwinner H8? A arquitetura é armv7l que claramente não é um De 64 bits
- É ‘ melhor demonstrar uma maneira de encontrar as informações desejadas dentro do sistema em vez de usar terceiros informações de terceiros de fontes externas. É mais adequado ser um comentário do que uma resposta (daí todos os votos negativos).
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
– wikipediauname -a
egcc -v
? Isso pode ser útil.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