est mon linux ARM 32 ou 64 bits?

60

sous un renseignement je sais que je peux regarder le résultat de uname -msavoir si mon système d'exploitation est en 32 ou 64 bits, mais sous ARM cela donne:

armv7l

J'ai déduit de

file /usr/bin/ls

que je suis sur un système d'exploitation 32 bits, mais comment puis-je le savoir plus facilement?

Chris Maes
la source
3
le bras 7 a 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 je devinais donc, mais alors quel est le nom de la variante 64 bits?
Chris Maes
1
Je n'ai pas accès à une machine ARM mais quelle est la sortie de uname -aet gcc -v? Ceux-ci pourraient être utiles.
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.- fr.wikipedia.org/wiki/ARM_architecture#64.2F32-bit_architecture
ctrl-alt-delor
Arm était le dernier des processeurs 32 bits à passer à 64 bits (à l’exclusion de ceux qui sont décédés). La plupart ont opté pour la technologie 64 bits, puis sont décédées en raison d'un marketing médiocre. Intel x86 était l'avant-dernier, bien que ce soit AMD qui ait ajouté 64 bits.
ctrl-alt-delor

Réponses:

75

Il existe plusieurs gradations, car vous pouvez exécuter un système d'exploitation 32 bits ou mixte sur un processeur compatible 64 bits. Voir le noyau 64 bits, mais tous les processus exécutables ELF 32 bits en cours d'exécution, comment est-ce? pour une discussion détaillée (écrite pour x86, mais la majeure partie s’applique également à arm).

Vous pouvez trouver le modèle de processeur dans /proc/cpuinfo. Par exemple:

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

ARMv7 (et au-dessous) est 32 bits. ARMv8 introduit le jeu d’instructions 64 bits.

Si vous voulez voir si votre système prend en charge les fichiers binaires 64 bits, vérifiez l'architecture du noyau:

$ uname -m
armv7l

Sur un processeur 64 bits, vous verriez une chaîne commençant par armv8(ou supérieure) si le unameprocessus lui-même est un processus 32 bits ou aarch64s'il s'agit d'un processus 64 bits. (Voir aussi https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Gilles, arrête de faire le mal
la source
2
Je ne conteste pas votre réponse, mais malheureusement Android est UN LINUX, alors supposons qu'il y ait une commande, QUELQUE PART que la montrer localement et ne pas lire une documentation sur une page
THESorcerer
1
@THESorcerer Android utilise un noyau Linux mais ce n'est pas un système Linux. Il ne dispose pas d'outils utilisateur utilisateur Linux (seulement un très petit sous-ensemble). Sur Android, je pense que la prise en charge 64 bits est cohérente dans le système d'exploitation de base. Par conséquent cat /proc/$$/maps, vous saurez si le système est en version 64 bits ou 32 bits à partir d'une ligne de commande adb.
Gilles, arrête de faire le mal
3
Je crois que Raspberry Pi 3, qui correspond à ARMv8 (CRC, pas de cryptage optionnel), sera signalé armv7lmême si son ARMv8. Donc, je suis sûr que le mauvais processeur sera signalé.
1
@jww Si c'est le cas armv7l, cela signifie que vous utilisez un noyau 32 bits. Vous pouvez exécuter un noyau 32 bits sur un processeur 64 bits. Si vous voulez des informations sur la CPU, lisez /proc/cpuinfo.
Gilles, arrête de faire le mal '25
uname -m retourne simplement "aarch64". / proc / cpuinfo ne contient pas toujours un nom pour un processeur.
Halsafar le
23

Comme le souligne richard, les armv7variantes sont toutes en 32 bits, il n'y a donc pas d'étiquette redondante armv7-32, etc.

Sur un système Linux, vous pouvez facilement, bien que pas vraiment, vérifier en exécutant un exécutable commun:

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

Je dis "pas définitivement" car il est possible d'exécuter des exécutables 32 bits sur un système 64 bits.

Il ne semble pas y avoir quoi que ce soit d'infaillable en /procou /sys; la sortie de /proc/cpuinfo peut fournir des indices significatifs. Si, pour une raison quelconque, vous avez besoin d’une vérification automatique, la création d’une table mappée sur le champ "nom du modèle" semble être une méthode potentiellement judicieuse (d’autres champs, y compris "modèle", "famille de processeurs", etc. pas du tout pour moi sur un processeur Broadcom 2708 ARMv6).

boucle d'or
la source
Donc, armv7l est 32 bit non?
Bakalolo
1
@bakalolo Lire la question et la réponse acceptée lentement;)
goldilocks
11

Installez le paquet 'lshw'.

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

On dirait que la plupart des façons de voir le nombre de bits est de savoir que arm7 = 32 bits et que cela peut être vrai, mais qu'en est-il

pi@rpi9:~ $ getconf LONG_BIT
32

Et si vous voulez chercher le modèle de processeur, j'utilise normalement 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
la source
getconf LONG_BIT est très simple
Abdulkarim Kanaan
1

Essayez ce qui suit.

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

La taille de l'adresse est void*.

ceving
la source
1
sizeofles retours size_tqui doivent être imprimés avec%zu . L'utilisation d'un spécificateur de format incorrect appelle un comportement indéfini
phuclv
et la taille de vide * n'est pas nécessairement la largeur de bit d'architecture. Avez-vous déjà entendu parler de x32 ABI sites.google.com/site/x32abi
phuclv
De même, getconf -a | grep LONG_BIT
kaiwan
2
Cela ne vous dit rien d'autre que la nature de votre compilateur .
Rsethc
-5

Non, c'est un ordinateur 64 bits. C'est un Allwinner H8, qui est un double ARM-7. 8 cœurs, 64 bits, powervr, sgx 544, à double vitesse (700 MHz).

Donc non, il est capable d'être en 64 bits. Juste le système d'exploitation pourrait être 32.

Jaap Daniels
la source
Où avez-vous trouvé que le PO utilisait Allwinner H8? L’architecture est armv7l, ce qui n’est clairement pas un 64 bits
phuclv
Il est préférable de démontrer un moyen de rechercher les informations souhaitées dans le système plutôt que d'utiliser des informations tierces provenant de sources externes. Ceci est plus approprié pour être un commentaire que pour une réponse (d'où tous les votes négatifs).
Synetech