The uname(1)
command-line utility has a -m
option which prints the "machine hardware name".
On Linux, this field comes from the machine
member of struct utsname
, as populated by the uname(2)
system call.
Many other language APIs return this information:
os.uname()
and platform.machine()
php_uname()
What are the possible values for the "machine" field?
(v4.12 - 2017-July)
Let's refer to the source of the newuname system call.
Tracking this down is complicated by the fact that Linux has UTS namespaces, but the init_uts_ns
machine
field is initialized by the UTS_MACHINE
macro, which is defined per-architecture.
Further complicating matters, machine
can be overridden via override_architecture()
, if the process is running under a 32-bit "compat" personality, to COMPAT_UTS_MACHINE
.
UTS_MACHINE
defaults in Makefile
to the same thing as ARCH
. However, many platforms have separate sub-architectures under the same arch
directory, so they set UTS_MACHINE
themselves
With the list of directories in arch/
and a little grep
-ing of the Linux kernel sources (git grep 'UTS_MACHINE\s*:='
and git grep COMPAT_UTS_MACHINE
), we can arrive at this list:
alpha
arc
arm
aarch64_be
(arm64
)aarch64
(arm64
)armv8b
(arm64
compat)armv8l
(arm64
compat)
blackfin
c6x
cris
frv
h8300
hexagon
ia64
m32r
m68k
metag
microblaze
mips
(native or compat)mips64
(mips
)mn10300
nios2
openrisc
parisc
(native or compat)parisc64
(parisc
)ppc
(powerpc
native or compat)ppc64
(powerpc
)ppcle
(powerpc
native or compat)ppc64le
(powerpc
)s390
(s390x
compat)s390x
score
sh
sh64
(sh
)sparc
(native or compat)sparc64
(sparc
)tile
unicore32
i386
(x86
)i686
(x86
compat)x86_64
(x64
)xtensa