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

Chr*_*aes 91 64bit arm 32bit

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

armv7l
Run Code Online (Sandbox Code Playgroud)

我从

file /usr/bin/ls
Run Code Online (Sandbox Code Playgroud)

我在 32 位操作系统上,但我如何以更简单的方式知道这一点?

Gil*_*il' 110

有几个等级,因为您可以在支持 64 位的 CPU 上运行 32 位或混合操作系统。看到64位内核,但所有32位ELF可执行运行进程,这是怎么回事?详细讨论(为 x86 编写,但其中大部分也适用于 arm)。

您可以在 中找到处理器型号/proc/cpuinfo。例如:

$ cat /proc/cpuinfo
Processor       : ARMv7 Processor rev 10 (v7l)
Run Code Online (Sandbox Code Playgroud)

ARMv7(及以下)是 32 位的。ARMv8引入了 64 位指令集。

如果您想查看您的系统是否支持 64 位二进制文​​件,请检查内核架构:

$ uname -m
armv7l
Run Code Online (Sandbox Code Playgroud)

在 64 位处理器上,armv8如果uname进程本身是 32 位进程,或者aarch64如果它是 64 位进程,您会看到一个以(或以上)开头的字符串。(另见/sf/ask/3158786151/

  • 我相信树莓派 3,即 ARMv8(CRC,无可选加密)会报告 `armv7l`,即使它是 ARMv8。所以我很确定会报告错误的 CPU。 (5认同)
  • @THESorcerer Android 使用 Linux 内核,但它不是 Linux 系统。它没有 Linux 用户土地工具(只有很小的一个子集)。在 Android 上,我认为 64 位支持在基本操作系统中是一致的,因此 `cat /proc/$$/maps` 会通过 adb 命令行让您知道系统是 64 位还是 32 位。 (3认同)
  • @jww 如果它报告 `armv7l`,则意味着您正在运行 32 位内核。您可以在 64 位 CPU 上运行 32 位内核。如果你想了解 CPU 的信息,请阅读 `/proc/cpuinfo`。 (3认同)
  • 我不反对你的答案,但不幸的是 android 是一个 LINUX,所以,假设有一些命令,在本地显示它而不是阅读某个页面上的文档 (2认同)

gol*_*cks 29

正如 Richard 指出的,armv7变体都是 32 位的,所以没有多余的 labelarmv7-32等。

在 linux 系统上,您可以通过检查常见的可执行文件轻松地进行检查,尽管不是绝对确定的:

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

我说“不确定”是因为可以在 64 位系统上运行 32 位可执行文件。

虽然目前没有看来是任何万无一失的/proc/sys; 的输出/proc/cpuinfo 可能会提供一些重要的线索。如果由于某种原因您需要自动检查,创建一个映射到“模型名称”字段的表似乎是一种可能合理的方法(其他字段,包括“模型”、“cpu 系列”等看起来是可选的——它们不在 Broadcom 2708 ARMv6 处理器上对我来说根本没有出现)。

  • @bakalolo 慢慢阅读问题和接受的答案;) (2认同)

小智 14

安装“lshw”包。

# lshw
...
    description: Computer
    product: Raspberry Pi 3 Model B Rev 1.2
    width: 32 bits
...
Run Code Online (Sandbox Code Playgroud)


小智 10

似乎查看位数的大多数方法是以某种方式知道 arm7=32 位,虽然这可能是真的,但是呢

pi@rpi9:~ $ getconf LONG_BIT
32
Run Code Online (Sandbox Code Playgroud)

如果你想寻找 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
Run Code Online (Sandbox Code Playgroud)

  • getconf LONG_BIT 非常简单 (2认同)