在英特尔下,我知道我可以查看结果来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*
.