sob um intel eu sei que posso olhar para o resultado de uname -m
saber 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?
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.2F32-bit_architectureRespostas:
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: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:
Em um processador de 64 bits, você verá uma sequência iniciada por
armv8
(ou acima) se ouname
processo em si for de 32 bits ouaarch64
se for de 64 bits. (Consulte também https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )fonte
cat /proc/$$/maps
, você saberá se o sistema é de 64 ou 32 bits a partir de uma linha de comando adb.armv7l
mesmo que o seu ARMv8. Então, eu tenho certeza que a CPU errada será relatada.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
.Como richard aponta, as
armv7
variantes são todas de 32 bits, portanto não há rótulo redundantearmv7-32
etc.Em um sistema Linux, você pode verificar facilmente, embora não de maneira definitiva, examinando um executável comum:
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
/proc
ou/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).fonte
Instale o pacote 'lshw'.
fonte
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
E se você quiser procurar o modelo da CPU, eu normalmente uso o arch
fonte
Tente o seguinte.
O tamanho do endereço é
void*
.fonte
sizeof
retornossize_t
que devem ser impressos usando%zu
. Usando o especificador formato errado invoca um comportamento indefinidoNã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.
fonte