`uname -m` 可能的取值

42

uname(1)命令行工具有一个-m选项,用于打印“机器硬件名称”。

在Linux上,该字段来自struct utsnamemachine成员,由uname(2)系统调用填充。

许多其他语言API返回此信息:

“机器”字段可能具有哪些值?


2
Python的os.uname()在配置Botan库时,给Jack Lloyd带来了不少麻烦,因为它无法确定操作系统和平台。Linux和BSD是可以的,但其他操作系统似乎提供了不一致的结果,例如MinGW、Cygwin、Solaris、Dragonfly等等。您可能需要查看botan/configure.py。如果安慰的话,Cmake甚至更糟糕。 - jww
@jww 我很好奇几年后这是否仍然正确。 - Marcel Wilson
1个回答

61

Linux

(v4.12 - 2017年7月)

让我们参考newuname系统调用的源代码。

由于Linux拥有UTS namespaces,因此跟踪这一点变得复杂,但是init_uts_nsmachine字段通过UTS_MACHINE宏进行初始化,该宏是按体系结构定义的。

进一步复杂化问题的是,如果进程在32位“兼容性”个性下运行,则可以通过override_architecture()覆盖machineCOMPAT_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_bearm64大端)
  • aarch64arm64
  • armv8barm64兼容)
  • armv8larm64兼容)

  • blackfin(黑鳍)

  • c6x(C6X)
  • cris(CRIS)
  • frv(FRV)
  • h8300(H8300)
  • hexagon(六边形)
  • ia64(IA-64)
  • m32r(M32R)
  • m68k(M68K)
  • metag(Metag)
  • microblaze(MicroBlaze)
  • mips(本机或兼容)
  • mips64mips
  • mn10300(MN10300)
  • nios2(Nios II)
  • openrisc(OpenRISC)
  • parisc(本机或兼容)
  • parisc64parisc
  • ppcpowerpc本机或兼容)
  • ppc64powerpc
  • ppclepowerpc本机或兼容)
  • ppc64lepowerpc
  • s390s390x兼容)
  • s390x(S390X)
  • score(SCORE)
  • sh(SH)
  • sh64sh
  • sparc(本机或兼容)
  • sparc64sparc
  • tile(Tile)
  • unicore32(UniCore32)
  • i386x86
  • i686x86兼容)
  • x86_64x64
  • xtensa(Xtensa)

8
对于当前的Linux一代,这无疑是其中一种价值观。过去可能有其他的价值观,未来也可能会有其他的价值观。 - Stephen C
@StephenC 当然可以。就我而言,我有几个架构想法,并想知道如何最好地检测它们。具体来说,如果我说 if platform.machine().startswith('ppc'),那么它就是PowerPC,而 if platform.machine().startswith('arm'),那么它就是ARM。 - Jonathon Reinhart
3
@JonathonReinhart - 这很快就会像浏览器识别字符串一样 - 例如,'aarch64' 是 ARM 架构,但不以或包含 'arm'。对于类似 x86 的 CPU,我们有 i386、i686 或 x86_64(尽管我的 Python Windows 安装返回 AMD64)。 - askvictor
6
这个列表缺少 armv7l,例如在以32位模式运行的Raspberry Pi 4报告。 - cfstras
2
另一个列表可以在https://en.wikipedia.org/wiki/Uname找到。 - cfstras
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接