我的linux ARM是32位还是64位?

我的linux ARM是32位还是64位?

在英特尔下,我知道我可以查看结果来uname -m了解我的操作系统是 32 位还是 64 位,但在 ARM 下,这会给出:

armv7l

我推断出

file /usr/bin/ls

我使用的是 32 位操作系统,但我怎样才能以更简单的方式知道这一点?

答案1

由于您可以在支持 64 位的 CPU 上运行 32 位或混合操作系统,因此有多个等级。看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 位进程,或者aarch64如果它是 64 位进程,您会看到一个以(或以上)开头的字符串。 (也可以看看https://stackoverflow.com/questions/45125516/possible-values-for-uname-m

答案2

正如理查德指出的那样,armv7变体都是 32 位的,因此没有多余的 labelarmv7-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*.

相关内容