KernelBuildpackageHowto

来自Ubuntu中文
Qiii2006留言 | 贡献2010年5月8日 (六) 01:12的版本 →‎问题
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索

内核编译指南

介绍

本页谈论如何重建 Ubuntu Linux 内核包。这是自己编译 Ubuntu 内核最直接的方法,但它也是相当重量级的方法。如果你打算做一些内核开发或调试的话,你也许会更高兴地按照 本指南 来做。它更复杂一点但也更灵活。

安装

我们将在你用户目录中构建“Linux”目录下的任何东西(或是你想调用的)。下面的步骤必须做为根用户(通过前面用"sudo")来运行。

$ sudo apt-get build-dep linux-source-2.6.8.1
$ mkdir ~/linux
$ cd ~/linux
$ apt-get source linux-source-2.6.8.1
$ cd linux-source-2.6.8.1-2.6.8.1

注意:这种方式需要很大的磁盘空间,尤其是在你想要一些特色时(看下面)。在实现全部特色时,需要1.6G。它可能在编译期间甚至需要更多的磁盘空间。

配置

到这一步,你也许想改变你的内核配置。在 debian/config/ARCH/ (比如我当前的内核是“linux-image-2.6.8.1-3-686”,那么我将编辑debian/config/i386/686)目录中修改相应的文件。

你可能也想删除其它那些你不关心的配置。或者至少将它们移到另一个目录中。否则,你将从头构建每一个--这是一个非常耗时的过程。下面的示例就是就是除了686之外,不构建任何特色。

$ cd debian/config/i386
$ mkdir disabled
$ mv * disabled
$ mv disabled/686 .

构建

现在源已经被安装和配置好了,构建它。如果你不对上述特色进行限制的话,它需要花费相当长的时间(在我的1Ghz的本本上花了大约七小时)。 -B 是说只构建依赖结构的两进制文件,-uc 和 -us 是指这些文件不能被加密,-rfakerroot 允许你作为一般(非根)用户去做任何事。

$ cd ~/linux/linux-source-2.6.8.1-2.6.8.1
$ dpkg-buildpackage -B -uc -us -rfakeroot

安装

现在安装新的包

$ cd ~/linux
$ sudo dpkg -i linux/linux-image-2.6.8.1-3-686_2.6.8.1-16_i686.deb

构建链接

如果你打算构建一些额外的 2.6 驱动,它们可能要求从 /lib/modues 链接到构建环境里。你需要手动设置它们。当然用你的用户名重置 USER,否则请确实指定你用来构建包的 Linux 目录的绝对路径。

$ sudo ln -s /home/USER/linux/linux-source-2.6.8.1-2.6.8.1/debian/build/build-686 /lib/modules/2.6.8.1-3-686/build
$ sudo ln -s /home/USER/linux/linux-source-2.6.8.1-2.6.8.1/debian/build/build-686 /lib/modules/2.6.8.1-3-686/source

启动引导

你将设置你的启动引导,就象 KernelCompileHowto 中启动引导那节所建议的那样。

重启

然后重启计算机!

问题

什么是修订版本号?当用 make-kpkg 构建时,你可以有 --revision=custom.xx 来创建你们自定义内核修订版本。


通过这种方式怎样处理修订版本? 怎样处理ABI改变? --mukesh agrawal, Sat, 14 May 2005 19:28:29 +0100


我尝试按上面的介绍来构建内核。但内核有一些 ABI 的改变(我使内核的环回块设备支持无效,以便我可以建构 loop-aes )。构建系统显示下列错误: "ABI has changed! Refusing to continue; please update the ABINAME accordingly. Differences:" “ABI 被改动!不能继续;请更新相应的ABINAME。不同之处:” 但没有给出任何的关于在哪里和怎样改动 ABINAME 。我试了很多似乎是最明显的地方(编辑debian/abi/<kernel-version>/abiname),但编辑之事对编译系统无效。

编辑 .config --mukesh agrawal, Sat, 14 May 2005 19:34:19 +0100

就我所知,该处理过程并非让你在构建树中运行 make config 。而是建议在你自己的树中作近似处理,然后拷贝并覆盖 .config 文件?(手动编辑 .config 看上去并不是好的办法)

构建处理 --mukesh agrawal, Sat, 14 May 2005 19:36:40 +0100

该构建过程总是在构建之前清理树的。有人能对该效果进行确认和添加记录吗?因为构建 Ubuntu 的 .config 文件的时间相当长,它对于你在构建前预先 知道如何如你所愿地得到你的源和 .config 文件来说是十分有用的。本文档也提示了这一点,说该过程是“重量级的”,但我想明确地说明这一点也将是有帮 助的。