CONFIG_X86_64标志及其用法

时间:2018-02-06 18:11:44

标签: linux-kernel x86-64

我刚检查了我的linux盒子的配置文件/ boot / config _ $(uname -r),我发现这两个标志都已定义:

CONFIG_X86_64=y
CONFIG_X86=y

这两个标志不应该互相排斥吗?

另外,我想知道这两个标志是否只应该在内核中使用,因为我看到很多

 #ifdef CONFIG_X86_64

在内核源代码中。用户空间应用程序也可以使用此标志吗?

此外,由于处理器可以从64位模式更改为兼容模式。如果发生这种变化,依赖于CONFIG_X86_64的代码在运行时都会失败,对吧?应用程序(内核或用户空间)如何检测机器是64位还是兼容模式?

感谢。

1 个答案:

答案 0 :(得分:2)

CONFIG_X86是目标架构的标志,整个x86系列。
这包括32位和64位处理器。

通过查看最新的内核(编写本文时为4.15.1)可以看出这一点Kconfig file 1

# SPDX-License-Identifier: GPL-2.0
# Select 32 or 64 bit
config 64BIT
    bool "64-bit kernel" if ARCH = "x86"
    default ARCH != "i386"
    ---help---
      Say yes to build a 64-bit kernel - formerly known as x86_64
      Say no to build a 32-bit kernel - formerly known as i386

config X86_32
    def_bool y
    depends on !64BIT

    #... other options removed

config X86_64
    def_bool y
    depends on 64BIT

在此文件中,配置选项将被删除CONFIG_前缀 定义了CONFIG_X86_64,{i}定义CONFIG_64BIT,否则CONFIG_X86_32 查看depends on声明以查看它。

在64位内核中,此命令cat /boot/config-$(uname -r) | grep 'CONFIG_64BIT'应返回CONFIG_64BIT=y

this answer中也确认了如何将32位配置转换为64位配置的问题。

CONFIG_X86_64的反义词因此CONFIG_X86_32

TL; DR CONFIG_X86是为所有x86处理器定义的,或者是位数。 CONFIG_X86_64仅针对支持AMD64 / IA32e的x86处理器的子集定义。

1 此链接可能随时更改。请参阅this