uname(1)
命令行工具有一个-m
选项,用于打印“机器硬件名称”。
在Linux上,该字段来自struct utsname
的machine
成员,由uname(2)
系统调用填充。
许多其他语言API返回此信息:
- Python:
os.uname()
和platform.machine()
- PHP:
php_uname()
“机器”字段可能具有哪些值?
uname(1)
命令行工具有一个-m
选项,用于打印“机器硬件名称”。
在Linux上,该字段来自struct utsname
的machine
成员,由uname(2)
系统调用填充。
许多其他语言API返回此信息:
os.uname()
和platform.machine()
php_uname()
“机器”字段可能具有哪些值?
(v4.12 - 2017年7月)
让我们参考newuname系统调用的源代码。
由于Linux拥有UTS namespaces,因此跟踪这一点变得复杂,但是init_uts_ns
machine
字段通过UTS_MACHINE
宏进行初始化,该宏是按体系结构定义的。
进一步复杂化问题的是,如果进程在32位“兼容性”个性下运行,则可以通过override_architecture()
覆盖machine
为COMPAT_UTS_MACHINE
。
Makefile
文件中,UTS_MACHINE
默认与ARCH
相同。然而,许多平台在同一arch
目录下有单独的子架构,因此它们会自行设置UTS_MACHINE
。arch/
目录下的目录列表,并对Linux内核源代码进行一些grep
操作(git grep 'UTS_MACHINE\s*:='
和git grep COMPAT_UTS_MACHINE
),我们可以得到以下列表。
alpha
(阿尔法)arc
(弧度)
arm
(军队)
aarch64_be
(arm64
大端)aarch64
(arm64
)armv8b
(arm64
兼容)armv8l
(arm64
兼容)
blackfin
(黑鳍)
c6x
(C6X)cris
(CRIS)frv
(FRV)h8300
(H8300)hexagon
(六边形)ia64
(IA-64)m32r
(M32R)m68k
(M68K)metag
(Metag)microblaze
(MicroBlaze)mips
(本机或兼容)mips64
(mips
)mn10300
(MN10300)nios2
(Nios II)openrisc
(OpenRISC)parisc
(本机或兼容)parisc64
(parisc
)ppc
(powerpc
本机或兼容)ppc64
(powerpc
)ppcle
(powerpc
本机或兼容)ppc64le
(powerpc
)s390
(s390x
兼容)s390x
(S390X)score
(SCORE)sh
(SH)sh64
(sh
)sparc
(本机或兼容)sparc64
(sparc
)tile
(Tile)unicore32
(UniCore32)i386
(x86
)i686
(x86
兼容)x86_64
(x64
)xtensa
(Xtensa)if platform.machine().startswith('ppc')
,那么它就是PowerPC,而 if platform.machine().startswith('arm')
,那么它就是ARM。 - Jonathon Reinhartarmv7l
,例如在以32位模式运行的Raspberry Pi 4报告。 - cfstras
os.uname()
在配置Botan库时,给Jack Lloyd带来了不少麻烦,因为它无法确定操作系统和平台。Linux和BSD是可以的,但其他操作系统似乎提供了不一致的结果,例如MinGW、Cygwin、Solaris、Dragonfly等等。您可能需要查看botan/configure.py。如果安慰的话,Cmake甚至更糟糕。 - jww