【问题标题】:CONFIG_X86_64 flag and its usageCONFIG_X86_64 标志及其用法
【发布时间】:2018-07-16 21:23:56
【问题描述】:

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

CONFIG_X86_64=y
CONFIG_X86=y

这两个标志不应该是互斥的吗?

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

 #ifdef CONFIG_X86_64

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

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

谢谢。

【问题讨论】:

    标签: linux-kernel x86-64


    【解决方案1】:

    CONFIG_X86 是针对整个 x86 家族的架构的标志。
    这包括 32 位和 64 位处理器。

    这可以通过查看最新内核(在撰写本文时为 4.15.1)Kconfig file1

    看出
    # 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_64BIT 已定义,则CONFIG_X86_64 已定义,否则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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多