我尝试使用make defconfig
来编译内核,但正如预期的那样,它无法启动。我想知道什么.config文件做内核供应商喜欢Canonical for Ubuntu使用,内核能够开箱即用启动。当然,我仍然是初学者并且配置各种参数,目前在我的联盟中有点偏差。
具体来说,我希望加载一个基本的“你好,世界!”模块到我运行的内核2.6.32.41。为此,我需要针对用于运行内核的相同.config文件编译内核源代码。
答案 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)
与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。