老旧文章/KernelBuildpackageDetailedHowto
来自Ubuntu中文
跳到导航跳到搜索
by Markus Kolb <ubuntu-ml -at- tower-net.de> December 25th 2004 这里介绍通过非官方途径编译你自己的内核.如果你不明白为什么需要自己定制的内核,你就没有必要阅读本文。
对于一般用户,使用ubuntu提供的官方内核可能更好,因为这样你可以自动并且安全的获得更新,也没有必要一次又一次的自己去编译内核。
但有时需要自己对运行的内核作些更改.或许一些附加特性的补丁和重要的修正并不包括在官方的内核中. 还有些人希望有针对他们电脑配置的更小的优化过的内核.
这篇how-to并不会讲怎样的内核配置选项才能使你所有的东西完美运行.如果你想要移除某些内核选项,你必须明白你在做什么或者敢于尝试和犯错误.
你必须使用Ubuntu Linux系统进行以下程序。 你不能在其他的发行版中,比如Debian,来通过Ubuntu的源码来编译Ubuntu内核,除非使用某些技巧. 请保持耐心,告诉我我用英语的过程中是否有失误.我是德国人,(使用英语)自然不会十分完美.
这份指南适用于Ubuntu 4.10(Warty Warthog)
Changes
- Dec, 25th 2004 – Markus Kolb – publication of the howto.
- Apr, 23rd 2005 – Chris Fazekas – added 'sudo apt-get install devscripts' to install required app 'dch'.
内核编译和 Debian 包编译需要的包
- 你首先需要确认 /etc/apt/sources.list 中的以下行未被注释:
deb-src http://archive.ubuntu.com/ubuntu/ warty main restricted deb-src http://security.ubuntu.com/ubuntu/ warty-security main restricted
- 现在你需要运行:
$ sudo apt-get update
你可以使用以下命令来安装编译所需要的软件包:
$ sudo apt-get build-dep linux-source-2.6.8.1 $ sudo apt-get install fakeroot $ sudo apt-get install devscripts
下载正确的 Ubuntu 内核源码
- 不要使用二进制库 (binary repository) 中的linux源码包 (linux-source packages) . 这些包产生的进程不能产生正确的映像,Ubuntu 将不能正常运行,除非人为介入. 所以你还必须下载Ubuntu使用的正确的内核源码包.
- 下载源码时,将当前目录更改到你希望保存该源码的位置: 然后运行:
apt-get source linux-source-2.6.8.1
- 三个文件会被下载 源码的描述文件,extension.dsc,gzip 打包的原始的内核源码和 gzip 打包的 diff 文件,里面包括原始源码和 Ubuntu 源码的差别。
- 这些文件将会被解压到 linux-source-2.6.8.1 的子目录,并打上 diff 的补丁. 你并不需要做任何事情.
如果你想要之后自己解压,你可以使用 dpkg-source-x <source-description.dsc>
在更改日志(changelog)中创建新的版本记录.
- 从现在起每个目录的描述将会和源文件解压后的目录有关,如果没有专门指出更改到某个特定目录,你应该在源文件目录下. 你必须在 debian/changelog 中添加一条新的记录. 此时你可以使用工具 dch
$ dch -i
- 将会在changelog中添加一条新的记录,包括添加增量后的版本号.并在你的文本编辑器中打开这个文件.你可以输入简短的描述说明你希望更改的内容,也可以调整版本号使之包括一个自定义的扩展. 例如最后一条存在的记录为:
- linux-source-2.6.8.1 (2.6.8.1-16.5) warty-security; urgency=high
- 添加增量后的记录将会是:
- linux-source-2.6.8.1 (2.6.8.1-16.6) warty-security; urgency=low
如果你使用版本号 2.6.8.1-16.6 ,你将不能从Ubuntu的软件库中获得下次安全的升级.所以使用扩展替换为:
- linux-source-2.6.8.1 (2.6.8.1-16.5custom) warty; urgency=low
更改内核配置
- 内核配置在目录 debian/config 下
- 每个架构和每个指定的处理器都有自己的配置文件. 所以如果你想为 i386 架构 686 处理器更改设置,你必须修改文件 debian/config/386/686 请记住我曾经告诉过你的话.如果你想要更改设置,你将只能靠自己独立完成. 如果你做错了某些事情,你电脑的某些硬件可能不会被支持,Linux启动时会有出错信息.
修改内核源码
- 不要在源码中做这些事.有许多补丁会在源码编译的时候被合并.所以如果你更改了会被打补丁某部分,内核编译时会因错误而中止.
- 但可以使用 dpatch 文件.这个文件通过官方途径来修改源码.
Dpatching 内核源码
- dpatch 文件在 debian/patches 目录下.
- 如果你有通过 diff-tool 工具创建的通常的 patch 文件,你可以用它来制作一个 dpatch 文件. 使用如下命令:
$ dpatch patch-template -p “{patchname}” “{patch-description}” < {diff-file} > debian/patches/{patchname}.dpatch
- 如果你必须更改源码,你可以使用:
$ dpatch-edit-patch {new-patchname}
- 这将会生成一个源文件目录的副本,并打开一个新的 shell .你可以对这个新的暂时的目录作任何更改.通过 "exit" 退出这个 shell 之后,所有的更改将会添加到新的 dpatch 文件( debian/patches/{new-patchname}.dpatch ) 中去.
- 在作出更改之后你必须在编译时声明存在新的补丁.对此,你可以复制最新的 debian/patches/00list-* file (样例中为00list-16.5) 到 debian/patches/00list-*custom (例如 00list-16.5custom ).
- 然后修改这个副本并添加新的 dpatch 名称,名称中不含 .dpatch 的扩展.
- 更多的细节请阅读 debian/ README.NMU!
编译内核
- 现在你几乎已经做好准备编译源码了,但是如果你现在开始,源码将会对你架构上的每个处理器都编译(386,686,686-smp,...)
- 你可以在 debian/rules中作出更改. 搜索定义flavours的部分:
#flavours := $(shell \ # find debian/config/$(arch) -maxdepth 1 -type f ! -name default \ # -printf '%f\n' \ #)
- 注释以下几行并添加你希望的处理器新的 flavour 定义
flavours := k7
flavours 和 debian/config/{architecure}中的一致 现在我们可以开始编译
dpkg-buildpackage -rfakeroot -us -uc -b
- 如果你没有任何失误,这将会编译二进制源码;o)
- 编译结束后,你可以在源文件目录的上一级目录中找到 deb 包. 样例中如下:
linux-doc-2.6.8.1_2.6.8.1-16.5custom_all.deb linux-headers-2.6.8.1-4_2.6.8.1-16.5custom_i386.deb linux-headers-2.6.8.1-4-k7_2.6.8.1-16.5custom_i386.deb linux-image-2.6.8.1-4-k7_2.6.8.1-16.5custom_i386.deb linux-patch-debian-2.6.8.1_2.6.8.1-16.5custom_all.deb linux-source-2.6.8.1_2.6.8.1-16.5custom_all.deb linux-tree-2.6.8.1_2.6.8.1-16.5custom_all.deb
- Juhuu.
编译其他的模块
- 有更多与内核相关的包,像 linux-restricted-modules . 如果你修改过内核并且你会使用这些模块,很可能你还还要将它们也重新编译.
- 如果你不得不依赖与这些补丁. 编译这些模块的过程和编译内核的过程类似
更多的信息和选择
- 对于不同的内核编译工具可以有更多的选择
- 因此至少简单的阅读一下工具的手册,知道它们可以干什么,这不失为一个好主意. 为此,可以输入:
- $ man {toolname} for this.
文章来源:官方WIKI
翻译人员:cocos
校对人员:
文章状态:翻译完毕