Einfache Befehlszeilenmethode zum Bestimmen einer bestimmten ARM-Architekturzeichenfolge?

24

Ich versuche ein Skript zu schreiben, das Aktionen basierend auf der Architektur der Maschine ermittelt. Ich verwende bereits uname -mdie Architektur Linie zu sammeln, aber ich weiß nicht , wie viele ARM - Architekturen gibt es, noch weiß ich, ob man armhf, armeloder arm64.

Da dies für dieses Skript erforderlich ist , um zu bestimmen , ob Teile des Skripts ausgeführt werden können oder nicht, ich versuche , einen einfachen Weg zu finden , um zu bestimmen , ob die Architektur ist armhf, armeloder arm64. Gibt es einen einzeiligen oder einfachen Befehl, mit dem entweder , oder ausgegeben werden armhfkann ?armelarm64

Das Skript wurde speziell für Debian- und Ubuntu-Systeme geschrieben, und ich bezeichne dies als solches (es wird automatisch beendet, wenn Sie sich nicht in einem dieser Distributionen befinden, aber dies könnte auch auf eine viel breitere Art und Weise angewendet werden, wenn die Befehl (e) vorhanden


BEARBEITEN: Kürzlich erfahren, dass armel tot ist und arm64 Software Builder (PPA oder virtuell) nicht die stabilsten sind. Also habe ich eine Wildcard-Suche, arm*die armhf findet und annimmt, aber es ist immer noch notwendig, einen Einzeiler zu finden, der einen der drei zurückgibt - ob es sich um einen Ubuntu / Debian-Befehl oder einen Kernel-Aufruf handelt oder so.

Thomas Ward
quelle
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacMachst du so etwas?
Costas
@Costas Ja, das ist effektiv , was ich nach, aber immer den Bogen ist der schwierige Teil. Da die Lösungen möglicherweise verteilungs- und betriebssystemmodellspezifisch sind, ähneln sich Debian und Ubuntu und sind mein Ziel. Daher wären Lösungen, die den Bogen rausholen und dann verwendbar sind, großartig. (Dies ist keine rein-Programmierung Frage entweder, ich brauche nur den Befehl , den spezifischen Bogen zu greifen - habe ich bereits i386, i686und x86_64Fälle basierend auf uname -m, aber nichts für arm??... oder zumindest nichts, identifizieren armhf, armeloder arm64) .
Thomas Ward
Was meinst du?
Costas
1
@Costas Spuckt bei ARM-Setups uname -mdie spezifische Armplatte aus - armv7lzum Beispiel. Es muss nicht ausdrücklich sagen , ob es armel, armhfoder arm64- das ist , was ich brauche , $(arch)mit wie um auszusondern unvereinbar OS - Architekturen enden.
Thomas Ward
Möglicherweise ist es besser, /proc/config.gz zu analysieren, wenn es vorhanden ist.
Umeboshi

Antworten:

38
dpkg --print-architecture

Gibt die primäre Architektur des Computers aus, auf dem es ausgeführt wird. Dies wird armhfauf einer Maschine sein, auf der 32-Bit ARM Debian oder Ubuntu (oder ein Derivat) ausgeführt wird, arm64auf einer Maschine, auf der 64-Bit ARM ausgeführt wird.

Beachten Sie, dass sich die ausgeführte Architektur möglicherweise von der Hardwarearchitektur oder sogar von der Kernelarchitektur unterscheidet. Es ist möglich, i386Debian auf einer 64-Bit-Intel- oder AMD-CPU auszuführen, und ich glaube, es ist möglich, Debian auf einer 64-Bit armhf-ARM-CPU auszuführen . Es ist sogar möglich, hauptsächlich i386Binärdateien (also die primäre Architektur i386) auf einem amd64Kernel zu haben ...

Stephen Kitt
quelle
Richtig, aber dies bestimmt die Architektur, die für die Pakete des Skripts benötigt wird. Ich werde das heute testen, danke.
Thomas Ward
1
Auf einem Android-Gerät gibt es keinen Befehl dpkg. Was kann ich tun, um die Architektur eines Android-Geräts zu erkennen?
Dr.jacky
@ Mr.Hyde Diese Frage richtete sich speziell an Debian und Ubuntu. Ich schlage vor, Sie stellen eine neue Frage, wenn Sie die Antwort für Android möchten, entweder hier oder auf android.stackexchange.com .
Stephen Kitt