Méthode de ligne de commande simple pour déterminer une chaîne d'architecture ARM spécifique?

24

J'essaie d'écrire un script qui déterminera les actions en fonction de l'architecture de la machine. J'utilise déjà uname -mpour recueillir la ligne d'architecture, mais je ne sais pas combien d'architectures ARM , il y a, et je ne sais si l' on est armhf, armelou arm64.

Comme cela est nécessaire pour que ce script détermine si des parties du script peuvent être exécutées ou non, j'essaie de trouver un moyen simple de déterminer si l'architecture est armhf, armelou arm64. Y at - il une doublure ou une commande simple qui peut être utilisé pour la production soit armhf, armelou arm64?

Le script est spécifiquement écrit pour les systèmes Debian et Ubuntu, et je marque comme tel en gardant cela à l'esprit (il se ferme automatiquement si vous n'êtes pas sur l'une de ces distributions, mais cela pourrait également être appliqué de manière beaucoup plus large si le commande (s) existent)


EDIT: récemment appris que armel est mort, et les constructeurs de logiciels arm64 (PPA ou virtuels) ne sont pas les plus stables. J'ai donc une recherche générique qui trouve arm*et suppose armhf, mais il est toujours nécessaire de trouver une ligne qui renvoie l'un des trois - que ce soit une commande Ubuntu / Debian ou un appel au noyau ou quelque chose.

Thomas Ward
la source
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacvous meen quelque chose comme ça?
Costas
@Costas Oui, c'est effectivement ce que je recherche, mais obtenir l'arche est la partie la plus délicate. Étant donné que les solutions peuvent être spécifiques à la distribution et au modèle d'OS, Debian et Ubuntu sont similaires et sont ma cible, donc les solutions qui sortiraient l'arc et ensuite seraient utilisables seraient excellentes. (Ce n'est pas une question de pure programmation soit, je dois juste la commande pour saisir l'arc spécifique - je l' ai déjà i386, i686et les x86_64cas sur la base uname -m, mais rien pour arm??... ou du moins, rien qui identifie armhf, armelou arm64) .
Thomas Ward
Que voulez-vous dire?
Costas
1
@Costas Sur les configurations ARM, uname -mcrache la carte de bras spécifique - armv7lpar exemple. Il ne dit pas explicitement que ce soit armel, armhfou arm64- ce qui est ce que je dois $(arch)finir comme pour éliminer les architectures incompatibles avec OS.
Thomas Ward
Il vaut peut-être mieux analyser /proc/config.gz s'il est là.
umeboshi

Réponses:

39
dpkg --print-architecture

affichera l'architecture principale de la machine sur laquelle il est exécuté. Ce sera armhfsur une machine exécutant ARM 32 bits Debian ou Ubuntu (ou un dérivé), arm64sur une machine exécutant ARM 64 bits.

Notez que l'architecture en cours d'exécution peut être différente de l'architecture matérielle ou même de l'architecture du noyau. Il est possible d'exécuter i386Debian sur un processeur Intel ou AMD 64 bits, et je pense qu'il est possible de fonctionner armhfsur un processeur ARM 64 bits. Il est même possible d'avoir principalement des i386binaires (donc l'architecture principale est i386) sur un amd64noyau ...

Stephen Kitt
la source
C'est vrai, mais cela déterminera l'architecture nécessaire pour les packages du script. Je vais tester cela aujourd'hui, merci.
Thomas Ward
1
Sur un appareil Android, il n'y a pas de commande dpkg. Que dois-je faire pour détecter l'architecture d'un appareil Android?
Dr.jacky
@ Mr.Hyde cette question ciblait spécifiquement Debian et Ubuntu; Je vous suggère de poser une nouvelle question si vous voulez la réponse pour Android, ici ou sur android.stackexchange.com .
Stephen Kitt