Método de linha de comando fácil para determinar uma sequência de arquitetura específica do ARM?

24

Estou tentando escrever um script que determinará ações com base na arquitetura da máquina. Eu já uso uname -mpara reunir a linha de arquitetura, no entanto eu não sei quantas arquiteturas ARM existem, nem sei se é armhf, armelou arm64.

Como este é necessário para esse script para determinar se partes do script pode ser executado ou não, eu estou tentando encontrar uma maneira simples para determinar se a arquitetura é armhf, armelou arm64. Existe alguma one-liner ou comando simples que pode ser usado para a saída tanto armhf, armelou arm64?

O script foi escrito especificamente para os sistemas Debian e Ubuntu, e eu estou marcando isso com isso em mente (ele sai automaticamente se você não estiver em uma dessas distros, mas isso pode ser aplicado de uma maneira muito mais ampla também, se o comando (s) existe)


EDIT: Recentemente, aprendi que o armel está morto, e os construtores de software arm64 (PPA ou virtual) não são os mais estáveis. Então, eu tenho uma pesquisa curinga encontrando arm*e assumindo armhf, mas ainda é necessário descobrir um liner que retorne um dos três - seja um comando Ubuntu / Debian ou uma chamada do kernel ou algo assim.

Thomas Ward
fonte
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacvocê meen algo assim?
Costas
@ Costas Sim, é efetivamente o que estou procurando, mas conseguir o arco é a parte complicada. Como as soluções podem ser específicas para a distribuição e para o modelo do sistema operacional, o Debian e o Ubuntu são semelhantes e são o meu alvo, portanto, soluções que tirariam o arco da tela e depois usariam seriam ótimas. (Esta não é uma pura questão de programação, quer, eu só preciso o comando para pegar o arco específico - eu já tenho i386, i686e x86_64casos baseados em uname -m, mas nada para arm??... ou, pelo menos, nada que identifica armhf, armelou arm64) .
Thomas Ward
O que você quer dizer?
Costas
1
@Costas Nas configurações do ARM, uname -mcospe a placa do braço específica - armv7lpor exemplo. Ele não diz explicitamente se é armel, armhfou arm64- que é o que eu preciso $(arch)terminar para eliminar arquiteturas incompatíveis de SO.
Thomas Ward
Talvez seja melhor analisar /proc/config.gz se ele estiver lá.
umeboshi

Respostas:

38
dpkg --print-architecture

produzirá a arquitetura principal da máquina em que é executada. Isso ocorrerá armhfem uma máquina executando o ARM Debian de 32 bits ou Ubuntu (ou um derivado), arm64em uma máquina executando o ARM de 64 bits.

Observe que a arquitetura em execução pode ser diferente da arquitetura do hardware ou mesmo da arquitetura do kernel. É possível rodar o i386Debian em uma CPU Intel ou AMD de 64 bits, e acredito que seja possível rodar armhfem uma CPU ARM de 64 bits. É até possível ter principalmente i386binários (então a arquitetura principal é i386) em um amd64kernel ...

Stephen Kitt
fonte
Certo, mas isso determinará a arquitetura necessária para os pacotes do script. Vou testar isso hoje, obrigado.
Thomas Ward
1
Em um dispositivo Android, não há comando dpkg. O que devo fazer para detectar a arquitetura de um dispositivo Android?
Dr.jacky
@ Mr.Hyde, esta pergunta foi direcionada especificamente ao Debian e Ubuntu; Sugiro que você faça uma nova pergunta se quiser a resposta para o Android, aqui ou no android.stackexchange.com .
Stephen Kitt