web-dev-qa-db-fra.com

est mon linux ARM 32 ou 64 bits?

sous un renseignement, je sais que je peux regarder le résultat de uname -m pour savoir si mon système d'exploitation est 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?

73
Chris Maes

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 noyau 64 bits, mais tous les processus exécutables exécutables ELF 32 bits, comment est-ce? pour une discussion détaillée (écrit pour x86, mais la plupart s'applique également à l'armement).

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

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

ARMv7 (et inférieur) est de 32 bits. ARMv8 introduit le jeu d'instructions 64 bits.

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

$ uname -m
armv7l

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

Comme le souligne Richard, armv7 les variantes 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, mais pas vraiment définitivement, vérifier en examinant 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 rien être infaillible dans /proc ou /sys; la sortie de /proc/cpuinfomai fournit quelques indices importants. Si, pour une raison quelconque, vous avez besoin d'une vérification automatisée, la création d'une table mappée sur le champ "nom du modèle" semble être une méthode potentiellement saine (d'autres champs, y compris "modèle", "famille de processeurs", etc. semblent facultatifs - ils ne ' n'apparaissent pas du tout pour moi sur un processeur Broadcom 2708 ARMv6).

24
goldilocks

Installez le package 'lshw'.

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

On dirait que la plupart des façons de voir le nombre de bits est de savoir en quelque sorte que arm7 = 32 bits et bien que cela puisse ê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
5
lpaseen

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*.

1
ceving