在Ubuntu上构建自己的内核

我正在尝试构建自己的内核,因为我想编写一个需要编译到内核中的内核程序。

那么我做了什么呢?从kernel.org下载,解压,进行make menuconfig并根据需要配置所有内容,然后进行make,make modules_install,make install,最后进行update-grub。

结果:根本无法启动...

现在我看了一下这里,它描述了一种不同的编译内核的方法。这可能是我之前的方式不起作用的原因吗? 还是有其他人对为什么我的内核不工作有任何想法?


######## 编辑

非常好的答案,谢谢你,Oli。但是我按照传统的方式尝试了一下,编译了一个小时后收到了这个消息:

install -p    -o root -g root  -m  644 ./debian/templates.master /usr/src/linux-2.6.37.3/debian/linux-image-2.6.37.3meinsmeins/DEBIAN/templates
dpkg-gencontrol -DArchitecture=i386 -isp         \
        -plinux-image-2.6.37.3meinsmeins -P/usr/src/linux-2.6.37.3/debian/linux-image-2.6.37.3meinsmeins/
dpkg-gencontrol: error: package linux-image-2.6.37.3meinsmeins not in control info
make[2]: *** [debian/stamp/binary/linux-image-2.6.37.3meinsmeins] Error 255
make[2]: Leaving directory `/usr/src/linux-2.6.37.3'
make[1]: *** [debian/stamp/binary/pre-linux-image-2.6.37.3meinsmeins] Error 2
make[1]: Leaving directory `/usr/src/linux-2.6.37.3'
make: *** [kernel-image] Error 2

你可以尝试一下KernelCheck;欲获取更多信息,请查看Webupd8.org上的如何简易地在Ubuntu中编译内核 - Reda Lazri
启动消息?通常这些消息有助于调试配置问题。 - mathepic
错误:无法找到GSI x的IOAPIC - 这里的x是一些数字,我猜应该是1、4和12。我还尝试以恢复模式启动,出现了许多不同的消息(但实际上没有错误消息,只有标准的初始化消息),最终导致系统冻结。 - user12408
2个回答

根据你所说的一些要点:
使用`make-kpkg`!你真的不想用`make install`来编译内核。内核是相当庞大的东西,你希望它们以包的形式存在,这样你可以快速地通过`apt-get remove`来卸载它们。
Kernel/Compile文档中所描述的“老派方法”是我知道的在Ubuntu上编译内核并使用非Ubuntu特定源(如Kernel.org)的最佳方式。
跳过`make localmodconfig`步骤。它可能有用,但更多时候,它似乎只会导致问题(对我来说)。
我不建议你自己配置整个内核。拉取最新的Ubuntu配置文件,并以此为基础进行配置。这将为你提供一个良好且合理的默认配置,你可以根据需要进行修剪。当你构建下一个版本时,只需将配置文件向前移动,并执行`make oldconfig`以查看是否有任何新选项(在主要版本之间跳转时通常会出现)。
如果你正在Maverick上构建2.6.38版本,我建议你回退到Natty的配置。你需要从packages.ubuntu.com下载该软件包,并从其引导文件夹中提取配置文件。我已经询问过是否有更简单的方法,但似乎没有。
简而言之:只需严格按照“老派的方式”去做。一旦你自己建立了几个包并且知道自己在做什么,就可以随意尝试一下公式。

谢谢 :) 我可能会从头再试一次,按照这个教程来做。请看我上面的编辑 :) - user12408

在Ubuntu中编译内核非常简单。几周前,我使用了备选构建方法,效果非常完美。我认为你应该尝试一下这种方法,因为它可以自动完成多项任务,减少出错的可能性。
然而,你描述的方法通常也是可行的,所以很有可能你可能是按照过时的指南或者做错了什么。