мой linux ARM 32 или 64 бит?

60

в Intel я знаю, что могу посмотреть на результат uname -m, если моя ОС будет 32- или 64-битной, но в ARM это дает:

armv7l

Я вывел из

file /usr/bin/ls

что я на 32-битной ОС, но как я могу узнать это проще?

Крис Мэйс
источник
3
рука 7 является 32-битной. ARMv8-A architecture, announced in October 2011,[6] adds support for a 64-bit address space and 64-bit arithmetic.- Википедия
ctrl-alt-delor
@ Richard Я так и думал, но тогда как называется 64-битный вариант?
Крис Мэйс
1
У меня нет доступа к машине ARM, но каковы результаты uname -aи gcc -v? Это может быть полезно.
Terdon
Announced October 2011, ARMv8-A (often called ARMv8 although not all variants are 64-bit such as ARMv8-R) represents a fundamental change to the ARM architecture. It adds a 64-bit architecture, named "AArch64", and a new "A64" instruction set. AArch64 provides user-space compatibility with ARMv7-A ISA, the 32-bit architecture, therein referred to as "AArch32" and the old 32-bit instruction set, now named "A32" ARM announced their Cortex-A53 and Cortex-A57 cores on 30 October 2012.- en.wikipedia.org/wiki/ARM_architecture#64.2F32-bit_architecture
ctrl-alt-delor
Arm был последним из 32-битных процессоров, которые стали 64-битными (исключая тех, кто умер). Большинство перешло на 64-битную версию, а затем умерло из-за плохого маркетинга - предполагая, что лучше быть достаточно. Intel x86 был вторым по продолжительности, хотя это была AMD, которая добавила 64 бит.
Ctrl-Alt-Delor

Ответы:

75

Существует несколько градаций, поскольку вы можете запускать 32-битную или смешанную операционную систему на 64-битном процессоре. Посмотрите 64-битное ядро, но все 32-битные исполняемые ELF-процессы, как это? для подробного обсуждения (написано для x86, но большая часть относится и к arm).

Вы можете найти модель процессора в /proc/cpuinfo. Например:

$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)

ARMv7 (и ниже) является 32-битным. ARMv8 представляет 64-битный набор команд.

Если вы хотите узнать, поддерживает ли ваша система 64-битные двоичные файлы, проверьте архитектуру ядра:

$ uname -m
armv7l

На 64-битном процессоре вы увидите строку, начинающуюся armv8(или выше), если сам unameпроцесс является 32-битным или aarch6464-битным процессом. (См. Также https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Жиль "ТАК - перестань быть злым"
источник
2
Я не оспариваю ваш ответ, но, к сожалению, android - это LINUX, так что, предположим, есть какая-то команда, ГДЕ-ТО, которая показывает его локально и не читает документацию на какой-то странице
THESorcerer
1
@THESorcerer Android использует ядро ​​Linux, но это не система Linux. У него нет пользовательских инструментов Linux (только очень небольшое подмножество). На Android, я думаю, что поддержка 64-битной операционной системы в базовой ОС является постоянной, поэтому cat /proc/$$/mapsвы сможете узнать, является ли система 64-битной или 32-битной из командной строки adb.
Жиль "ТАК, перестань быть злым"
3
Я полагаю, что Raspberry Pi 3, который является ARMv8 (CRC, без дополнительного Crypto), сообщит, armv7lдаже если его ARMv8. Так что я уверен, что о неправильном процессоре будет сообщено.
1
@jww Если он сообщает armv7l, это означает, что вы используете 32-битное ядро. Вы можете запустить 32-битное ядро ​​на 64-битном процессоре. Если вам нужна информация о процессоре, прочитайте /proc/cpuinfo.
Жиль "ТАК - перестань быть злым"
uname -m просто возвращает "aarch64". / proc / cpuinfo также не всегда содержит имя для процессора.
Halsafar
23

Как указывает Ричард, armv7все варианты 32-битные, поэтому нет избыточной метки armv7-32и т. Д.

В системе linux вы можете легко, хотя и не совсем точно, проверить, изучив общий исполняемый файл:

> which bash
/bin/bash
> file /bin/bash
/bin/bash: ELF 32-bit LSB executable, ARM, version 1 (SYSV) ...

Я говорю «не окончательно», потому что можно запускать 32-битные исполняемые файлы в 64-битной системе.

Там, кажется, нет ничего надежного в /procили /sys; вывод из /proc/cpuinfo может предоставить некоторые важные подсказки. Если по какой-либо причине вам нужна автоматическая проверка, создание таблицы, сопоставленной с полем «имя модели», кажется одним из потенциально надежных методов (другие поля, включая «модель», «семейство процессоров» и т. Д. Выглядят необязательными - они не у меня вообще нет процессора Broadcom 2708 ARMv6).

лютик золотистый
источник
Так что armv7l 32 битный верно?
Bakalolo
1
@bakalolo Читайте вопрос и принимайте ответ медленно;)
Златовласка
11

Установите пакет 'lshw'.

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...
Ральф
источник
3

Похоже, что большинство способов увидеть количество битов - это знать, что arm7 = 32 бит, и хотя это может быть правдой, но как насчет

pi@rpi9:~ $ getconf LONG_BIT
32

И если вы хотите искать модель процессора, я обычно использую арку

root@rpi4:~# tr '\0' '\n' </proc/device-tree/model;arch
Raspberry Pi Model B Rev 2
armv6l

pi@rpi9:~ $ tr '\0' '\n' </proc/device-tree/model;arch
Raspberry Pi 3 Model B Rev 1.2
armv7l
lpaseen
источник
getconf LONG_BIT очень прост
Абдулкарим Канаан
1

Попробуйте следующее.

// -*- compile-command: "gcc -Wall -o sizeof sizeof.c && ./sizeof" -*-

#include <stdio.h>
#include <limits.h>

#define size(t) { t x; printf("%s:\t%3lu bit\n", #t, CHAR_BIT * sizeof x); }

int main (int argc, char *argv[])
{
  size(char);
  size(short);
  size(int);
  size(long);
  size(void*);
  return 0;
}

Размер адреса есть void*.

ceving
источник
1
sizeofвозвращает, size_tкоторые должны быть распечатаны с использованием%zu . Использование неправильного спецификатора формата вызывает неопределенное поведение
phuclv
и размер void * не обязательно является шириной архитектуры бит. Вы когда-нибудь слышали о x32 ABI sites.google.com/site/x32abi
phuclv
Аналогично, getconf -a | grep LONG_BIT
kaiwan
2
Это не говорит вам ни о чем, кроме природы вашего компилятора .
rsethc
-5

Нет, это 64-битный компьютер. Это Allwinner H8, ведьма - двойной ARM-7. 8 ядер, 64 бита, powervr, sgx 544, с удвоенной скоростью (700 МГц).

Так что нет, он может быть 64-битным. Просто ОС может быть 32.

Яап Дэниелс
источник
где вы обнаружили, что ОП использует Allwinner H8? Архитектура armv7l, которая явно не является 64-битной
phuclv
Лучше продемонстрировать способ поиска нужной информации внутри системы, а не использовать стороннюю информацию из внешних источников. Это лучше подходит, чтобы быть комментарием, чем ответом (следовательно, все отрицательные голоса).
Synetech