从 /proc 文件系统获取 Linux 架构

从 /proc 文件系统获取 Linux 架构

我正在用 Java 编写一个程序,我需要确定编译 Linux 的体系结构。

我需要类似的东西uname -m,但不运行任何程序,而是来自/procpseduo-fs。

什么是可靠的阅读来源?

答案1

由于您可以在 64 位计算机上安装 32 位 Linux,因此更安全的方法似乎是验证 CPU 功能。对于 Intel 和兼容处理器:

grep -o -w 'lm' /proc/cpuinfo 

http://www.unixtutorial.org/2009/05/how-to-confirm-if-your-cpu-is-32bit-or-64bit/

您正在寻找的是以下标志:lm。它代表 X86_FEATURE_LM,即长模式(64 位)支持。如果您可以在 CPU 标志中找到“lm”标志,则意味着您正在寻找支持 64 位的处理器。

答案2

我所看到的一切都告诉我,uname二进制文件只是进行了系统调用来uname()获取其信息,因此这可能比您想要的更困难。如果您愿意实现一些 JNI,我建议您这样做并发出系统调用。/proc我能找到的最有价值的伪文件是/proc/sys/kernel/osrelease,在我的系统上它的内容为4.2.3-300.fc23.x86_64.这会随着版本的不同而变化,并且可能会在 Linux 的风格之间发生巨大的变化,因此它可能不像您需要的那么可靠。

答案3

看起来没有包含uname -m输出行的文件,即x86_64ppc64le. Arch 既不存储/proc/cpuinfo/proc/sys/kernel/.

但也许比解析/proc/cpuinfo(Rui F Ribeiro 的 xaccepted 答案)稍微好一点的是解析/sys/devices/system/cpu/modalias

$ cat /sys/devices/system/cpu/modalias # x86_64
cpu:type:x86,ven0000fam0006mod005E:feature:,0000,0001,0002,0003...

$ cat /sys/devices/system/cpu/modalias # s390x
cpu:type:z13:feature:,0000,0001,0002,0003,0004,0005,0006,0007,0008,0009,000A,000B

但接下来的问题是如何映射这些。

顺便说一句,在内核中它的定义UTS_MACHINE := $(ARCH)如下生成文件 如果需要通过拱门进行调整:

x86{,_64}:

ifeq ($(CONFIG_X86_32),y)
    ...
    UTS_MACHINE := i386
    ...
else
    ...
    UTS_MACHINE := x86_64
    ...

powerpc: ppc{,64,64le}:

UTS_MACHINE := $(subst $(space),,$(machine-y))

s390x:

UTS_MACHINE := s390x

架构64:

ifeq ($(CONFIG_CPU_BIG_ENDIAN), y)
...
UTS_MACHINE := aarch64_be
else
...
UTS_MACHINE := aarch64
endif

答案4

尝试 uname 命令。

$ 男人 uname

或者

$ uname -a

再见,

相关内容