Простой метод командной строки для определения конкретной строки архитектуры ARM?

24

Я пытаюсь написать сценарий, который будет определять действия на основе архитектуры машины. Я уже использую , uname -mчтобы собрать архитектуру линии, однако я не знаю , сколько ARM архитектуры есть, и я не знаю , является ли один armhf, armelили arm64.

Как это требуется для этого сценария , чтобы определить , можно ли работать или нет части сценария, я пытаюсь найти простой способ определить , является ли архитектура armhf, armelили arm64. Есть ли один вкладыш или простая команда , которая может быть использована для вывода сигнала armhf, armelили arm64?

Сценарий специально написан для систем Debian и Ubuntu, и я помечаю теги как таковые с учетом этого (он автоматически завершается, если вы не находитесь в одном из этих дистрибутивов, но его можно применять гораздо более широко, если команда (ы) существует)


РЕДАКТИРОВАТЬ: недавно узнал, что armel мертв, и сборщики программного обеспечения arm64 (PPA или виртуальные) не являются наиболее стабильными. Таким образом, у меня есть поиск с подстановочными arm*символами, который находит и принимает armhf, но все равно необходимо выяснить один строковый элемент, который возвращает один из трех - будь то команда Ubuntu / Debian или вызов ядра или что-то в этом роде.

Томас Уорд
источник
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esacВы имеете в виду что-то подобное?
Костас
@Costas Да, это то, что я хочу, но получить арку - сложная часть. Поскольку решения могут зависеть от дистрибутива и конкретной модели ОС, Debian и Ubuntu схожи и являются моей целью, поэтому решения, которые позволят получить всю необходимую информацию и пригодны для использования, будут хорошими. (Это не чисто программирования вопроса либо, я просто нужна команда , чтобы захватить конкретную арку - у меня уже есть i386, i686и x86_64случаи , основанные на uname -m, но ничего для arm??... или , по крайней мере, ничего такого , что идентифицирует armhf, armelили arm64) ,
Томас Уорд
Что вы имеете в виду?
Костас
1
@Costas В настройках ARM, например, uname -mвыплевывает специальную плату armv7lдля рук . Он прямо не сказать , является ли это armel, armhfили arm64- что то , что мне нужно , $(arch)чтобы в конечном итоге , как для того , чтобы отсеять несовместимых архитектур ОС с.
Томас Уорд
Возможно, вам лучше разобрать /proc/config.gz, если он там есть.
Умебоши

Ответы:

39
dpkg --print-architecture

выведет основную архитектуру машины, на которой он запущен. Это будет armhfна машине с 32-битным ARM Debian или Ubuntu (или производной), arm64на машине с 64-битным ARM.

Обратите внимание, что работающая архитектура может отличаться от аппаратной архитектуры или даже архитектуры ядра. Возможно запустить i386Debian на 64-битном процессоре Intel или AMD, и я считаю, что это возможно armhfна 64-битном процессоре ARM. Даже возможно иметь в основном i386двоичные файлы (поэтому основная архитектура i386) в amd64ядре ...

Стивен Китт
источник
Правильно, но это определит архитектуру, необходимую для пакетов скрипта. Я проверю это сегодня, спасибо.
Томас Уорд
1
На устройстве Android нет команды dpkg. Что я должен сделать, чтобы определить архитектуру устройства Android?
Dr.jacky
@ Mr.Hyde этот вопрос был специально адресован Debian и Ubuntu; Я предлагаю вам задать новый вопрос, если вы хотите получить ответ для Android, здесь или на android.stackexchange.com .
Стивен Китт