내 리눅스 ARM 32 또는 64 비트입니까?


60

인텔에서 나는 uname -m내 OS가 32 또는 64 비트인지 알 수있는 결과를 볼 수 있지만 ARM에서는 다음을 제공합니다.

armv7l

나는 추론했다

file /usr/bin/ls

내가 32 비트 OS를 사용하고 있지만 어떻게 더 쉽게 알 수 있습니까?


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 비트 변형의 이름은 무엇입니까?
Chris Maes 2016 년

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 비트 CPU 중 마지막 64 비트 (죽은 칩 제외)였습니다. 더 나은 것이 충분하다고 가정 할 때, 대부분 마케팅이 좋지 않아 64 비트를 갔다가 사망했습니다. 인텔 x86은 두 번째로 오래되었지만 64 비트를 추가 한 것은 AMD였습니다.
ctrl-alt-delor

답변:


74

64 비트 가능 CPU에서 32 비트 또는 혼합 운영 체제를 실행할 수 있으므로 몇 가지 그라데이션이 있습니다. 64 비트 커널을 참조 하지만 프로세스를 실행하는 모든 32 비트 ELF 실행 파일을 참조하십시오 . 자세한 논의를 위해 (x86 용으로 작성되었지만 대부분 팔에도 적용됨).

에서 프로세서 모델을 찾을 수 있습니다 /proc/cpuinfo. 예를 들면 다음과 같습니다.

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

ARMv7 이하는 32 비트입니다. ARMv8 에는 64 비트 명령어 세트가 도입되었습니다.

시스템이 64 비트 바이너리를 지원하는지 확인하려면 커널 아키텍처를 확인하십시오.

$ uname -m
armv7l

64 비트 프로세서에서는 프로세스 자체가 32 비트 프로세스이거나 64 비트 프로세스 인 armv8경우 시작하는 문자열 이상 uname이 표시 aarch64됩니다. ( https://stackoverflow.com/questions/45125516/possible-values-for-uname-m 참조 )


2
나는 당신의 대답에 이의를 제기하지 않는다,하지만 불행히도 안드로이드는 리눅스는, 그래서, 로컬이 아닌 보여 일부 명령, 어딘가에 일부 페이지의 문서를 읽을 수있을 가정
THESorcerer

1
@THESorcerer Android는 Linux 커널을 사용하지만 Linux 시스템은 아닙니다. Linux 사용자 랜드 도구는 없습니다 (매우 작은 서브 세트 만). 안드로이드에서는 기본 OS에서 64 비트 지원이 일관성이 있다고 생각하므로 cat /proc/$$/mapsadb 명령 줄에서 시스템이 64 비트인지 32 비트인지 알 수 있습니다.
Gilles

3
ARMv8 인 Raspberry Pi 3 (CRC, 선택적 암호화 없음)은 armv7lARMv8에서도 보고 할 것이라고 생각합니다. 따라서 잘못된 CPU 가보고 될 것이라고 확신합니다.

1
@jww이보고 armv7l되면 32 비트 커널을 실행하고 있음을 의미합니다. 64 비트 CPU에서 32 비트 커널을 실행할 수 있습니다. CPU에 대한 정보가 필요하면를 읽으십시오 /proc/cpuinfo.
Gilles

uname -m은 "aarch64"를 반환합니다. / proc / cpuinfo가 항상 프로세서의 이름을 포함하지는 않습니다.
Halsafar

23

Richard가 지적한 것처럼 armv7변형은 모두 32 비트이므로 중복 레이블 armv7-32등 이 없습니다 .

리눅스 시스템에서는, 실제로 결정적인 것은 아니지만, 일반적인 실행 파일을 검사하여 쉽게 확인할 수 있습니다 :

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

64 비트 시스템에서 32 비트 실행 파일을 실행할 수 있기 때문에 "확실하지 않습니다"라고 말합니다.

/proc또는에 무모한 것으로 보이지 않습니다 /sys. 의 결과 는 몇 가지 중요한 단서를 제공 /proc/cpuinfo 할 수 있습니다 . 어떤 이유로 자동 검사가 필요한 경우, "모델 이름"필드에 매핑 된 테이블을 생성하는 것은 하나의 잠재적으로 건전한 방법으로 보입니다 ( "모델", "cpu 제품군"등의 다른 필드는 선택적으로 보입니다. 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

CPU 모델을 찾으려면 일반적으로 아치를 사용합니다.

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는 매우 간단합니다
Abdulkarim Kanaan

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
sizeofsize_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, 배속 (700MHz).

따라서 64 비트가 될 수 있습니다. OS 만 32 일 수 있습니다.


OP가 Allwinner H8을 사용하고있는 곳은 어디입니까? 이 아키텍처는 64 비트 하나 명확하지 않은 armv7l입니다
phuclv

외부 소스의 타사 정보를 사용하는 대신 시스템 에서 원하는 정보를 찾는 방법을 보여주는 것이 좋습니다 . 이것은 답변보다 주석에 더 적합합니다 (따라서 모든 다운 투표).
Synetech
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.