¿Método de línea de comando fácil para determinar una cadena de arquitectura ARM específica?

24

Estoy tratando de escribir un script que determinará las acciones basadas en la arquitectura de la máquina. Ya utilizo uname -mpara recoger la línea de la arquitectura, sin embargo no sé cuántos arquitecturas ARM no son, ni sé si uno es armhf, armelo arm64.

Ya que esto es necesario para esta secuencia de comandos para determinar si las partes de la secuencia de comandos se pueden ejecutar o no, yo estoy tratando de encontrar una forma sencilla de determinar si la arquitectura es armhf, armelo arm64. ¿Hay una sola línea o un comando simple que se puede utilizar para la producción, ya sea armhf, armelo arm64?

El script está específicamente escrito para los sistemas Debian y Ubuntu, y estoy etiquetando como tal con esto en mente (se cierra automáticamente si no está en una de esas distribuciones, pero esto también podría aplicarse de una manera mucho más amplia si el comando (s) existe)


EDITAR: Recientemente aprendí que Armel está muerto y que los creadores de software arm64 (PPA o virtual) no son los más estables. Así que tengo una búsqueda con comodines para encontrar arm*y asumir armhf, pero aún es necesario descubrir un revestimiento que devuelva uno de los tres, ya sea un comando de Ubuntu / Debian o una llamada del kernel o algo así.

Thomas Ward
fuente
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esac¿Te refieres a algo como esto?
Costas
@ Costas Sí, eso es efectivamente lo que busco, pero obtener el arco es la parte difícil. Dado que las soluciones pueden ser específicas de la distribución y del modelo del sistema operativo, Debian y Ubuntu son similares y son mi objetivo, por lo que las soluciones que sacarían el arco y luego serían útiles serían geniales. (Esto no es una cuestión de programación pura o bien, sólo necesito el comando para agarrar el arco específico - ya tengo i386, i686y x86_64casos en base a uname -m, pero nada de arm??... o, al menos, nada que identifica armhf, armelo arm64) .
Thomas Ward
¿Qué quieres decir?
Costas
1
@Costas En configuraciones ARM, uname -mescupe la placa de brazo específica, armv7lpor ejemplo. No dice explícitamente si se trata de armel, armhfo arm64- que es lo que necesito $(arch)para terminar como el fin de eliminar a las arquitecturas de sistemas operativos incompatibles con.
Thomas Ward
Puede que sea mejor analizar /proc/config.gz si está allí.
umeboshi

Respuestas:

39
dpkg --print-architecture

generará la arquitectura primaria de la máquina en la que se ejecuta. Esto será armhfen una máquina que ejecute ARM Debian de 32 bits o Ubuntu (o un derivado), arm64en una máquina que ejecute ARM de 64 bits.

Tenga en cuenta que la arquitectura en ejecución puede ser diferente de la arquitectura de hardware o incluso la arquitectura del núcleo. Es posible ejecutar i386Debian en una CPU Intel o AMD de 64 bits, y creo que es posible ejecutar armhfen una CPU ARM de 64 bits. Incluso es posible tener principalmente i386binarios (por lo que la arquitectura principal es i386) en un amd64núcleo ...

Stephen Kitt
fuente
Correcto, pero esto determinará la arquitectura necesaria para los paquetes del script. Probaré esto hoy, gracias.
Thomas Ward
1
En un dispositivo Android, no hay un comando dpkg. ¿Qué debo hacer para detectar la arquitectura de un dispositivo Android?
Dr.jacky
@ Mr.Hyde, esta pregunta se dirigió específicamente a Debian y Ubuntu; Le sugiero que haga una nueva pregunta si desea la respuesta para Android, ya sea aquí o en android.stackexchange.com .
Stephen Kitt el