Semplice metodo da riga di comando per determinare una stringa di architettura ARM specifica?


24

Sto cercando di scrivere uno script che determinerà le azioni in base all'architettura della macchina. Uso già uname -ma raccogliere la linea di architettura, ma non so quanti architetture ARM ci sono, né so se uno è armhf, armelo arm64.

Dato che questo è richiesto per questo script per determinare se parti dello script possono essere eseguite o meno, sto cercando di trovare un modo semplice per determinare se l'architettura è armhf, armelo arm64. Esiste un one-liner o semplice comando che può essere utilizzato per l'output sia armhf, armelo arm64?

Lo script è stato scritto appositamente per i sistemi Debian e Ubuntu, e io taggo come tale con questo in mente (si chiude automaticamente se non ci si trova in una di quelle distro, ma questo potrebbe essere applicato in un modo molto più ampio se il comando (i) esiste)


EDIT: Recentemente appreso che armel è morto e che i costruttori di software arm64 (basati su PPA o virtuali) non sono i più stabili. Quindi ho una ricerca jolly per trovare arm*e assumere armhf, ma è ancora necessario capire un liner che restituisca uno dei tre - che si tratti di un comando Ubuntu / Debian o di una chiamata del kernel o qualcosa del genere.


case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacmi dici qualcosa del genere?
Costas,

@Costas Sì, è effettivamente quello che sto cercando, ma ottenere l'arco è la parte difficile. Dal momento che le soluzioni potrebbero essere specifiche per la distribuzione e il modello del sistema operativo, Debian e Ubuntu sono simili e sono il mio obiettivo, quindi le soluzioni che tirerebbero fuori l'arco e quindi sarebbero utilizzabili sarebbero grandi. (Questa non è una pura questione-di programmazione sia, ho solo bisogno il comando per afferrare l'arco specifico - ho già i386, i686e x86_64casi in base uname -m, ma nulla per arm??..., o almeno, nulla che identifica armhf, armelo arm64) .
Thomas Ward,

Cosa intendi?
Costas,

1
@Costas Nelle configurazioni ARM, uname -msputa la specifica scheda arm - armv7lad esempio. Non dice esplicitamente se è armel, armhfo arm64- che è quello che ho bisogno $(arch)di finire come al fine di estirpare le architetture OS incompatibili con.
Thomas Ward,

Potrebbe essere meglio analizzare /proc/config.gz se è lì.
umeboshi,

Risposte:


39
dpkg --print-architecture

produrrà l'architettura primaria della macchina su cui è in esecuzione. Questo sarà armhfsu una macchina che esegue ARM Debian a 32 bit o Ubuntu (o un derivato), arm64su una macchina che esegue ARM a 64 bit.

Si noti che l'architettura in esecuzione potrebbe essere diversa dall'architettura hardware o persino dall'architettura del kernel. È possibile eseguire i386Debian su una CPU Intel o AMD a 64 bit e credo che sia possibile eseguire armhfsu una CPU ARM a 64 bit. È anche possibile avere principalmente i386binari (quindi l'architettura principale è i386) su un amd64kernel ...


Giusto ma questo determinerà l'architettura necessaria per i pacchetti dello script. Lo proverò oggi, grazie.
Thomas Ward,

1
Su un dispositivo Android, non esiste alcun comando dpkg. Cosa devo fare per rilevare l'architettura di un dispositivo Android?
Dr.jacky,

@ Mr.Hyde questa domanda ha preso di mira specificamente Debian e Ubuntu; Ti suggerisco di fare una nuova domanda se vuoi la risposta per Android, qui o su android.stackexchange.com .
Stephen Kitt,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.