мій linux ARM 32 або 64 біт?


60

Згідно з інформацією, я знаю, що я можу подивитися на результат, 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.- wikipedia
ctrl-alt-delor

@richard Я так здогадувався, але тоді як називається 64-бітний варіант?
Кріс Мейс

1
Я не маю доступу до машини ARM, але що таке вихід uname -aі gcc -v? Вони можуть бути корисними.
тердон

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

Відповіді:


74

Існує кілька градацій, оскільки ви можете запустити 32-бітну або змішану операційну систему на 64-бітному процесорі. Дивіться 64-бітове ядро, але всі запущені 32-бітні ELF процеси, як це? для детального обговорення (написано для x86, але більша частина стосується і руки).

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

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

ARMv7 (і нижче) є 32-розрядним. ARMv8 представляє 64-розрядний набір інструкцій.

Якщо ви хочете дізнатися, чи підтримує ваша система 64-бітні бінарні файли, перевірте архітектуру ядра:

$ uname -m
armv7l

У 64-бітному процесорі ви побачите рядок, що починається з armv8(або вище), якщо сам unameпроцес є 32-розрядним процесом або aarch64якщо це 64-бітний процес. (Дивіться також https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )


2
Я не заперечую вашої відповіді, але, на жаль, android IS LINUX, тож, мабуть, є якась команда, ДЕЯКІ, що показують її локально, а не читати документацію на якійсь сторінці
THESorcerer

1
@THESorcerer Android використовує ядро ​​Linux, але це не система Linux. У ньому немає наземних інструментів користувача Linux (лише дуже невеликий підмножина). В ОС Android я вважаю, що 64-розрядна підтримка підтримується в базовій ОС, тому cat /proc/$$/mapsви повідомляєте, чи є система 64-бітною чи 32-розрядною з командного рядка adb.
Жиль

3
Я вважаю, що Raspberry Pi 3, що є ARMv8 (CRC, без додаткової криптовалюти), звітує, armv7lнавіть якщо ARMv8. Тож я впевнений, що про неправильний процесор буде повідомлено.

1
@jww Якщо він звітує armv7l, це означає, що ви використовуєте 32-бітове ядро. Ви можете запустити 32-бітове ядро ​​на 64-бітному процесорі. Якщо ви хочете отримати інформацію про процесор, прочитайте /proc/cpuinfo.
Жиль

uname -m просто повертає "aarch64". / proc / cpuinfo також не завжди містить ім'я для процесора.
Халсафар

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 може дати деякі значні підказки. Якщо з якоїсь причини вам потрібна автоматизована перевірка, створення таблиці, зіставленої у полі "ім'я моделі", здається одним із потенційно здорових методів (інші поля, включаючи "модель", "сімейство процесорних процесів" тощо, виглядають необов'язково - вони не " t взагалі не з’являються для мене на процесорі Broadcom 2708 ARMv6).


Отже, armv7l - 32 біт, правильно?
bakalolo

1
@bakalolo Почитайте питання та прийняту відповідь повільно;)
goldilocks

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

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*.


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, відьма - це подвійний АРМ-7. 8 ядер, 64 біт, powervr, sgx 544, з подвійною швидкістю (700 МГц).

Так що ні, він може бути 64-бітовим. Просто ОС може бути 32.


де ви виявили, що ОП використовує Allwinner H8? Архітектура - armv7l, яка, очевидно, не є 64-розрядною
phuclv

Краще продемонструвати спосіб пошуку бажаної інформації всередині системи, а не використання сторонніх даних із зовнішніх джерел. Це краще підходить для коментаря, ніж відповіді (звідси всі голоси).
Synetech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.