我正在尝试构建自己的内核,因为我想编写一个内核程序,然后将其编译到内核中。那么我做了什么?从 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
答案1
根据你所说的内容,有几点建议:
使用
make-kpkg
!您真的不想为make install
内核而烦恼。内核是相当庞大的东西,您希望将它们放在包中,这样您就可以快速地使用“apt-get remove”来“删除它!”。所描述的“老式方法”内核/编译文档是我所知道的如何使用随机(非 Ubuntu 特定的)源(例如 Kernel.org)在 Ubuntu 上编译内核的最佳方法。
跳过这
make localmodconfig
一步。它可能有用,但更多的时候,它似乎只会破坏一些东西(对我来说)。我不建议你亲自配置整个内核。获取最新的 Ubuntu 配置副本并以此为基础。这样你就能得到一个可以精简的合理默认值。当你构建下一个版本时,只需将配置向前拉,然后执行 a
make oldconfig
以查看是否有任何新选项(在主要版本之间切换时很常见)。如果你在 Maverick 上构建 2.6.38,我建议你撤回 Natty 的配置。你需要从以下位置下载软件包packages.ubuntu.com并从其启动文件夹中提取配置文件。我已经问过是否有更简单的方法可以做到这一点,但似乎没有。
简而言之:只需严格遵循“传统方法”。一旦您自己构建了几个包并且知道自己在做什么,就可以尝试使用公式。
答案2
在 ubuntu 中编译内核非常简单。几周前我使用了另一种构建方法,效果非常好。我认为你应该尝试这种方法,因为它可以自动为你完成几件事,这意味着出错的可能性更小。
但是,您描述的方法通常也应该有效,所以很有可能您遵循了过时的指南或做错了什么。