es mi linux ARM de 32 o 64 bits?

60

bajo una inteligencia sé que puedo ver el resultado de uname -msaber si mi sistema operativo es de 32 o 64 bits, pero bajo ARM esto da:

armv7l

Deduje de

file /usr/bin/ls

que estoy en un sistema operativo de 32 bits, pero ¿cómo puedo saber esto de una manera más fácil?

Chris Maes
fuente
3
el brazo 7 es 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 Supuse que sí, pero ¿cuál es el nombre de la variante de 64 bits?
Chris Maes
1
No tengo acceso a una máquina ARM, pero ¿cuál es la salida de uname -ay gcc -v? Eso podría 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 fue el último de la CPU de 32 bits en llegar a 64 bits (excluyendo los que murieron). La mayoría pasó a 64 bits y luego murió, debido a una mala comercialización, asumiendo que ser mejor es suficiente. El Intel x86 fue el penúltimo, aunque fue AMD el que agregó 64 bits.
ctrl-alt-delor

Respuestas:

75

Existen varias gradaciones, ya que puede ejecutar un sistema operativo mixto o de 32 bits en una CPU con capacidad de 64 bits. Ver kernel de 64 bits, pero todos los procesos ejecutables ELF de 32 bits, ¿cómo es esto? para una discusión detallada (escrita para x86, pero la mayor parte se aplica también al brazo).

Puede encontrar el modelo de procesador en /proc/cpuinfo. Por ejemplo:

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

ARMv7 (y abajo) es de 32 bits. ARMv8 presenta el conjunto de instrucciones de 64 bits.

Si desea ver si su sistema admite binarios de 64 bits, verifique la arquitectura del núcleo:

$ uname -m
armv7l

En un procesador de 64 bits, vería una cadena que comienza con armv8(o superior) si el unameproceso en sí es un proceso de 32 bits o aarch64si es un proceso de 64 bits. (Ver también https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Gilles 'SO- deja de ser malvado'
fuente
2
No cuestiono su respuesta, pero por desgracia Android es un Linux, así que, no supone que debe ser algún comando, en alguna parte que muestran de forma local y no a leer una documentación en alguna página
THESorcerer
1
@THESorcerer Android usa un kernel de Linux pero no es un sistema Linux. No tiene herramientas de usuario de Linux (solo un subconjunto muy pequeño). En Android, creo que el soporte de 64 bits es consistente en el sistema operativo base, por cat /proc/$$/mapslo que le permitirá saber si el sistema es de 64 bits o 32 bits desde una línea de comando adb.
Gilles 'SO- deja de ser malvado'
3
Creo que Raspberry Pi 3, que es ARMv8 (CRC, no Crypto opcional) informará armv7la pesar de que es ARMv8. Así que estoy bastante seguro de que se informará la CPU incorrecta.
1
@jww Si informa armv7l, significa que está ejecutando un kernel de 32 bits. Puede ejecutar un kernel de 32 bits en una CPU de 64 bits. Si desea información sobre la CPU, lea /proc/cpuinfo.
Gilles 'SO- deja de ser malvado'
uname -m solo devuelve "aarch64". / proc / cpuinfo tampoco siempre contiene un nombre para un procesador.
Halsafar
23

Como señala Richard, las armv7variantes son todas de 32 bits, por lo que no hay una etiqueta redundante armv7-32, etc.

En un sistema Linux, puede verificar fácilmente, aunque no de manera definitiva, examinando un ejecutable común:

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

Digo "no definitivamente" porque es posible ejecutar ejecutables de 32 bits en un sistema de 64 bits.

No parece haber nada infalible en /proco /sys; la salida de /proc/cpuinfo puede proporcionar algunas pistas significativas. Si por alguna razón necesita una verificación automática, la creación de una tabla asignada al campo "nombre del modelo" parece un método potencialmente sólido (otros campos, incluidos "modelo", "familia de la CPU", etc. parecen opcionales, no lo hacen) No aparece en absoluto para mí en un procesador Broadcom 2708 ARMv6).

encerrada dorada
fuente
Entonces armv7l tiene 32 bits ¿verdad?
bakalolo
1
@bakalolo Lea la pregunta y la respuesta aceptada lentamente;)
goldilocks
11

Instale el paquete 'lshw'.

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

Parece que la mayoría de las formas de ver el recuento de bits es saber de alguna manera que arm7 = 32 bits y aunque eso puede ser cierto, pero ¿qué pasa con

pi@rpi9:~ $ getconf LONG_BIT
32

Y si quieres buscar el modelo de CPU, normalmente uso 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
fuente
getconf LONG_BIT es muy sencillo
Abdulkarim Kanaan
1

Intenta lo siguiente.

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

El tamaño de la dirección es void*.

ceving
fuente
1
sizeofdevoluciones size_tque deben imprimirse con%zu . El uso del especificador de formato incorrecto invoca un comportamiento indefinido
phuclv
y el tamaño de void * no es necesariamente el ancho de bits de la arquitectura. ¿Alguna vez has oído hablar de x32 ABI sites.google.com/site/x32abi
phuclv
Del mismo modo, getconf -a | grep LONG_BIT
kaiwan
2
Esto no te dice nada más que la naturaleza de tu compilador .
rsethc
-5

No, es una computadora de 64 bits. Es un Allwinner H8, que es un doble ARM-7. 8 núcleos, 64 bits, powervr, sgx 544, a doble velocidad (700 mhz).

Entonces no, es capaz de ser de 64 bits. Solo el sistema operativo podría ser 32.

Jaap Daniels
fuente
¿Dónde encontraste que los OP están usando Allwinner H8? La arquitectura es armv7l que claramente no es un 64-bit uno
phuclv
Es mejor para demostrar una manera de encontrar la información deseada de dentro del sistema en lugar de utilizar la información de terceros de fuentes externas. Esto es más adecuado para ser un comentario que una respuesta (de ahí todos los votos negativos).
Synetech