【问题标题】:How do I get the correct .config file for compiling the Linux kernel source specific to my hardware?如何获得正确的 .config 文件来编译特定于我的硬件的 Linux 内核源代码?
【发布时间】:2012-06-25 16:18:33
【问题描述】:

我尝试使用make defconfig 编译内核,但正如预期的那样,它无法启动。我想知道像 Canonical 这样的内核供应商为 Ubuntu 使用什么 .config 文件,内核能够开箱即用地启动。当然,我还是个初学者,配置各种参数,目前有点不合我意。

具体来说,我正在寻找加载一个基本的“你好,世界!”模块到我正在运行的内核 2.6.32.41。为此,我需要针对用于运行内核的相同 .config 文件编译内核源代码。

【问题讨论】:

    标签: linux linux-kernel makefile kernel


    【解决方案1】:

    我不知道如何获得“适合您的硬件”的配置,但您可以使用 Ubuntu 提供的配置,方法是在 /boot/ 中查找以名称 config 开头的文件。可能不止一个,在这种情况下使用命令uname -r 告诉你当前正在运行哪个内核,然后你可以使用适当的配置。

    【讨论】:

      【解决方案2】:

      “defconfig”通常与常用硬件挂钩 - x86 或 x86_64,也许不是最近的芯片组或主板。有时,就像我的联想笔记本电脑一样,只有最新的内核源代码,并启用一些配置选项,在谷歌搜索 bugzilla 数据库后,它才能工作。

      就像 Jeff Welling 所说的,要获得使用中的配置,你可以在 /boot 目录下查看。我的 Fedora Core 也一样。但是,如果您想将基本程序编译为“内核模块”,并且仅表示“可加载内核模块”,则无需编译内核源代码。你只需要当前版本的内核头文件。例如,Ubuntu 10.04 中的“apt-cache search”会返回几个可能的选项:

      linux-headers-2.6.38 - Header files related to Linux kernel, specifically,
      linux-libc-dev - Linux Kernel Headers for development
      

      Ubuntu 通常会修补现有内核(来自 kernel.org)以拥有自己的内核。如果你已经下载了股票内核,并尝试使用 /boot 的配置文件(或者有时你可以找到当前加载的配置为 /proc/config.gz,如 Backtrack 的 Ubuntu,它基于 10.04 LTS),那么你可能需要使用名为“.config”的当前配置文件执行“make oldconfig”。然后“make oldconfig”将使用 .config 生成与内核源代码兼容的新 .config。

      【讨论】:

        【解决方案3】:

        如果您正在运行的内核是使用CONFIG_IKCONFIG_PROC 选项编译的,您可以在/proc/config.gz 中获取配置:

        $ zcat /proc/config.gz >my_config
        

        my_config.config 的形式复制到您的内核构建目录并运行make config 以提示您输入配置文件中缺少的配置选项(这只会在您使用更新的内核源时发生您正在运行的内核)。然后,您应该能够编译具有与当前内核相同功能的新内核。

        发行版通常使用自己的内核配置,其中大多数驱动程序被编译为模块,以便在请求相应的硬件时动态加载。此外,内核需要使用相关的引导选项(例如指定根文件系统的选项)进行引导。您的 defconfig 内核可能因此无法启动。

        【讨论】:

        • CONFIG_IKCONFIG_PROC 是否会增加太多的大小,或者为什么发行版默认没有这个?
        【解决方案4】:

        选项1:

        你启动系统的源代码

        cd /usr/src/linux-headers-3.2.0-29;
        

        这将生成.config

        sudo make oldconfig; 
        vi .config
        

        选项2:

        zcat /proc/config.gz > my_config
        

        选项 3:

        echo /boot/config* > my_config
        

        【讨论】:

        • 有时 .oldconfig 位于 cd /usr/src/kernel 内;
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 1970-01-01
        • 2010-12-13
        相关资源
        最近更新 更多