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?
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/cpuinfo
mai 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).
Installez le package 'lshw'.
# lshw
...
description: Computer
product: Raspberry Pi 3 Model B Rev 1.2
width: 32 bits
...
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
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*
.