bajo una inteligencia sé que puedo ver el resultado de uname -m
saber 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?
ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.
- wikipediauname -a
ygcc -v
? Eso podría 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_architectureRespuestas:
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: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:
En un procesador de 64 bits, vería una cadena que comienza con
armv8
(o superior) si eluname
proceso en sí es un proceso de 32 bits oaarch64
si es un proceso de 64 bits. (Ver también https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )fuente
cat /proc/$$/maps
lo que le permitirá saber si el sistema es de 64 bits o 32 bits desde una línea de comando adb.armv7l
a pesar de que es ARMv8. Así que estoy bastante seguro de que se informará la CPU incorrecta.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
.Como señala Richard, las
armv7
variantes son todas de 32 bits, por lo que no hay una etiqueta redundantearmv7-32
, etc.En un sistema Linux, puede verificar fácilmente, aunque no de manera definitiva, examinando un ejecutable común:
Digo "no definitivamente" porque es posible ejecutar ejecutables de 32 bits en un sistema de 64 bits.
No parece haber nada infalible en
/proc
o/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).fuente
Instale el paquete 'lshw'.
fuente
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
Y si quieres buscar el modelo de CPU, normalmente uso arch
fuente
Intenta lo siguiente.
El tamaño de la dirección es
void*
.fuente
sizeof
devolucionessize_t
que deben imprimirse con%zu
. El uso del especificador de formato incorrecto invoca un comportamiento indefinidoNo, 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.
fuente