itu linux ARM 32 atau 64 bit saya?

60

di bawah intel saya tahu saya bisa melihat hasilnya uname -muntuk mengetahui apakah OS saya 32 atau 64 bit, tetapi di bawah ARM ini memberi:

armv7l

Saya menyimpulkan dari

file /usr/bin/ls

bahwa saya menggunakan OS 32-bit, tetapi bagaimana saya bisa tahu ini dengan cara yang lebih mudah?

Chris Maes
sumber
3
lengan 7 adalah 32 bit. 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 Saya menduga begitu, tapi lalu apa nama varian 64-bit?
Chris Maes
1
Saya tidak memiliki akses ke mesin ARM tetapi apa output dari uname -adan gcc -v? Itu mungkin membantu.
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
Lengan adalah yang terakhir dari cpu 32bit untuk pergi 64bit (tidak termasuk mereka yang meninggal). Sebagian besar pergi 64bit dan kemudian mati, karena pemasaran yang buruk - dengan asumsi bahwa menjadi lebih baik sudah cukup. Intel x86 adalah yang kedua dari yang terakhir, meskipun AMD yang menambahkan 64 bit.
ctrl-alt-delor

Jawaban:

75

Ada beberapa gradasi, karena Anda dapat menjalankan sistem operasi 32-bit atau campuran pada CPU berkemampuan 64-bit. Lihat kernel 64-bit, tetapi semua proses menjalankan ELF 32-bit yang dapat dijalankan, bagaimana ini? untuk diskusi terperinci (ditulis untuk x86, tetapi sebagian besar berlaku untuk mempersenjatai juga).

Anda dapat menemukan model prosesor di /proc/cpuinfo. Sebagai contoh:

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

ARMv7 (dan di bawah) adalah 32-bit. ARMv8 memperkenalkan set instruksi 64-bit.

Jika Anda ingin melihat apakah sistem Anda mendukung binari 64-bit, periksa arsitektur kernel:

$ uname -m
armv7l

Pada prosesor 64-bit, Anda akan melihat string dimulai dengan armv8(atau di atas) jika unameproses itu sendiri adalah proses 32-bit, atau aarch64jika itu proses 64-bit. (Lihat juga https://stackoverflow.com/questions/45125516/possible-values-for-uname-m )

Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
Saya tidak menentang jawaban Anda, tetapi sayangnya android ADALAH LINUX, jadi, seharusnya ada beberapa perintah, DI
MANA SAJA
1
@THESorcerer Android menggunakan kernel Linux tetapi itu bukan sistem Linux. Itu tidak memiliki alat-alat pertanahan pengguna Linux (hanya sebagian kecil). Pada Android, saya pikir dukungan 64-bit konsisten di OS dasar, jadi cat /proc/$$/mapsakan memberi tahu Anda apakah sistemnya 64-bit atau 32-bit dari baris perintah adb.
Gilles 'SO- stop being evil'
3
Saya percaya Raspberry Pi 3, yang merupakan ARMv8 (CRC, tidak ada Crypto opsional) akan melaporkan armv7lmeskipun ARMv8-nya. Jadi saya cukup yakin CPU yang salah akan dilaporkan.
1
@jww Jika melaporkan armv7l, itu berarti Anda menjalankan kernel 32-bit. Anda dapat menjalankan kernel 32-bit pada CPU 64-bit. Jika Anda ingin informasi tentang CPU, baca /proc/cpuinfo.
Gilles 'SANGAT berhenti menjadi jahat'
uname -m hanya mengembalikan "aarch64". / proc / cpuinfo juga tidak selalu mengandung nama untuk prosesor.
Halsafar
23

Seperti yang ditunjukkan oleh richard, armv7varian semuanya 32-bit, jadi tidak ada label yang berlebihan armv7-32, dll.

Pada sistem linux, Anda dapat dengan mudah, meskipun tidak benar-benar definitif, memeriksa dengan memeriksa executable umum:

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

Saya katakan "tidak definitif" karena dimungkinkan untuk menjalankan executable 32-bit pada sistem 64-bit.

Tampaknya tidak ada sesuatu yang sangat mudah di dalam /procatau /sys; output dari /proc/cpuinfo dapat memberikan beberapa petunjuk signifikan. Jika karena alasan tertentu Anda memerlukan pemeriksaan otomatis, membuat tabel yang dipetakan ke bidang "nama model" sepertinya merupakan salah satu metode yang mungkin terdengar (bidang lainnya, termasuk "model", "keluarga cpu", dll. Terlihat opsional - tidak ada) t muncul sama sekali bagi saya pada prosesor Broadcom 2708 ARMv6).

goldilocks
sumber
Jadi armv7l adalah 32 bit, bukan?
akanolo
1
@bakalolo Baca pertanyaan dan jawaban yang diterima perlahan;)
goldilocks
11

Instal paket 'lshw'.

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...
Muntah
sumber
3

Sepertinya sebagian besar cara untuk melihat jumlah bit adalah entah bagaimana mengetahui bahwa arm7 = 32 bit dan sementara itu mungkin benar tetapi bagaimana

pi@rpi9:~ $ getconf LONG_BIT
32

Dan jika Anda ingin mencari model cpu saya biasanya menggunakan lengkungan

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
sumber
getconf LONG_BIT sangat mudah
Abdulkarim Kanaan
1

Coba yang berikut ini.

// -*- 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;
}

Ukuran alamatnya adalah void*.

mencari
sumber
1
sizeofmengembalikan size_tyang harus dicetak menggunakan%zu . Menggunakan format specifier yang salah memunculkan perilaku yang tidak terdefinisi
phuclv
dan ukuran void * belum tentu lebar bit arsitektur. Pernahkah Anda mendengar tentang x32 ABI sites.google.com/site/x32abi
phuclv
Demikian pula, getconf -a | grep LONG_BIT
kaiwan
2
Ini tidak memberi tahu Anda tentang apa pun selain sifat kompiler Anda .
rsethc
-5

Tidak, itu komputer 64-bit. Ini adalah Allwinner H8, penyihir adalah ARM-7 ganda. 8 core, 64 bit, powervr, sgx 544, dengan kecepatan ganda (700mhz).

Jadi tidak, itu mampu menjadi 64 bit. Hanya OS mungkin 32.

Jaap Daniels
sumber
di mana Anda menemukan bahwa OP menggunakan Allwinner H8? Arsitekturnya adalah armv7l yang jelas bukan 64-bit
phuclv
Lebih baik mendemonstrasikan cara untuk menemukan informasi yang diinginkan dari dalam sistem daripada menggunakan informasi pihak ketiga dari sumber eksternal. Ini lebih cocok untuk dijadikan komentar daripada jawaban (karenanya semua suara turun).
Synetech