![내 Linux ARM은 32비트입니까, 아니면 64비트입니까?](https://linux55.com/image/37964/%EB%82%B4%20Linux%20ARM%EC%9D%80%2032%EB%B9%84%ED%8A%B8%EC%9E%85%EB%8B%88%EA%B9%8C%2C%20%EC%95%84%EB%8B%88%EB%A9%B4%2064%EB%B9%84%ED%8A%B8%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
Intel에서는 결과를 보면 uname -m
내 OS가 32비트인지 64비트인지 알 수 있지만 ARM에서는 다음과 같은 정보가 제공됩니다.
armv7l
나는 추론했다
file /usr/bin/ls
32비트 OS를 사용하고 있는데 이를 더 쉽게 알 수 있는 방법은 무엇일까요?
답변1
64비트 지원 CPU에서 32비트 또는 혼합 운영 체제를 실행할 수 있으므로 여러 계층이 있습니다. 바라보다64비트 커널이지만 모든 32비트 ELF 실행 가능 프로세스가 실행되고 있습니다.자세히 논의했습니다(x86용으로 작성되었지만 대부분은 ARM에도 적용됩니다).
프로세서 모델 번호는 에서 찾을 수 있습니다 /proc/cpuinfo
. 예를 들어:
$ cat /proc/cpuinfo
Processor : ARMv7 Processor rev 10 (v7l)
ARMv7(및 그 이하)은 32비트입니다.ARMv864비트 명령어 세트를 소개합니다.
시스템이 64비트 바이너리를 지원하는지 확인하려면 커널 아키텍처를 확인하세요.
$ uname -m
armv7l
64비트 프로세서에서는 armv8
프로세스 uname
자체가 32비트 프로세스이거나 64비트 프로세스인 경우 aarch64
(또는 그 이상)로 시작하는 문자열이 표시됩니다 . (당신은 또한 볼 수 있습니다https://stackoverflow.com/questions/45125516/possible-values-for-uname-m)
답변2
Richard가 지적했듯이 변형은 모두 32비트이므로 중복되는 레이블 등이 armv7
없습니다 .armv7-32
Linux 시스템에서는 일반 실행 파일을 검사하여 이를 쉽게(명시적으로는 아니지만) 확인할 수 있습니다.
> 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 시리즈" 등을 포함한 다른 필드는 선택 사항으로 보입니다). - Broadcom 2708 ARMv6 프로세서에서는 전혀 나타나지 않습니다.
답변3
비트 수를 보는 대부분의 방법은 arm7 = 32비트라는 것을 알고 있는 것 같습니다. 그것이 사실일 수도 있지만, 어떻습니까?
pi@rpi9:~ $ getconf LONG_BIT
32
CPU 모델을 찾으려면 주로 Arch를 사용합니다.
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
답변4
다음을 시도해 보세요.
// -*- 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*
.