如何获取正确的.config文件来编译特定于我的硬件的Linux内核源代码?

时间:2012-06-23 18:22:06

标签: linux linux-kernel makefile kernel

我尝试使用make defconfig来编译内核,但正如预期的那样,它无法启动。我想知道什么.config文件做内核供应商喜欢Canonical for Ubuntu使用,内核能够开箱即用启动。当然,我仍然是初学者并且配置各种参数,目前在我的联盟中有点偏差。

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

4 个答案:

答案 0 :(得分:14)

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

$ zcat /proc/config.gz >my_config

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

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

答案 1 :(得分:5)

我不知道如何找到适合您硬件的那个",但是您可以通过查看/boot/来使用Ubuntu为您提供的配置以名称config开头的文件。可能有多个,在这种情况下使用命令uname -r来告诉您当前正在运行的内核,然后您可以使用适当的配置。

答案 2 :(得分:5)

<强> 选项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

答案 3 :(得分:0)

“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。