查看“老旧文章/KernelBuildpackageDetailedHowto”的源代码
来自Ubuntu中文
←
老旧文章/KernelBuildpackageDetailedHowto
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
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 中的以下行未被注释: * <pre><nowiki> deb-src http://archive.ubuntu.com/ubuntu/ warty main restricted deb-src http://security.ubuntu.com/ubuntu/ warty-security main restricted </nowiki></pre> * 现在你需要运行: * <pre><nowiki> $ sudo apt-get update </nowiki></pre> 你可以使用以下命令来安装编译所需要的软件包: * <pre><nowiki> $ sudo apt-get build-dep linux-source-2.6.8.1 $ sudo apt-get install fakeroot $ sudo apt-get install devscripts </nowiki></pre> === 下载正确的 Ubuntu 内核源码 === * 不要使用二进制库 (binary repository) 中的linux源码包 (linux-source packages) . 这些包产生的进程不能产生正确的映像,Ubuntu 将不能正常运行,除非人为介入. 所以你还必须下载Ubuntu使用的正确的内核源码包. * 下载源码时,将当前目录更改到你希望保存该源码的位置: 然后运行: <pre><nowiki> apt-get source linux-source-2.6.8.1 </nowiki></pre> * 三个文件会被下载 源码的描述文件,extension.dsc,gzip 打包的原始的内核源码和 gzip 打包的 diff 文件,里面包括原始源码和 Ubuntu 源码的差别。 * 这些文件将会被解压到 linux-source-2.6.8.1 的子目录,并打上 diff 的补丁. 你并不需要做任何事情. 如果你想要之后自己解压,你可以使用 dpkg-source-x <source-description.dsc> === 在更改日志(changelog)中创建新的版本记录. === * '''从现在起每个目录的描述将会和源文件解压后的目录有关,如果没有专门指出更改到某个特定目录,你应该在源文件目录下. ''' 你必须在 debian/changelog 中添加一条新的记录. 此时你可以使用工具 dch * <pre><nowiki> $ dch -i </nowiki></pre> * 将会在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 文件. 使用如下命令: <pre><nowiki> $ dpatch patch-template -p “{patchname}” “{patch-description}” < {diff-file} > debian/patches/{patchname}.dpatch </nowiki></pre> * 如果你必须更改源码,你可以使用: <pre><nowiki> $ dpatch-edit-patch {new-patchname} </nowiki></pre> * 这将会生成一个源文件目录的副本,并打开一个新的 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的部分: <pre><nowiki> #flavours := $(shell \ # find debian/config/$(arch) -maxdepth 1 -type f ! -name default \ # -printf '%f\n' \ #) </nowiki></pre> * 注释以下几行并添加你希望的处理器新的 flavour 定义 <pre><nowiki> flavours := k7 </nowiki></pre> flavours 和 debian/config/{architecure}中的一致 现在我们可以开始编译 * <pre><nowiki> dpkg-buildpackage -rfakeroot -us -uc -b </nowiki></pre> * 如果你没有任何失误,这将会编译二进制源码;o) * 编译结束后,你可以在源文件目录的上一级目录中找到 deb 包. 样例中如下: <pre><nowiki> 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 </nowiki></pre> * Juhuu. === 编译其他的模块 === * 有更多与内核相关的包,像 linux-restricted-modules . 如果你修改过内核并且你会使用这些模块,很可能你还还要将它们也重新编译. * 如果你不得不依赖与这些补丁. 编译这些模块的过程和编译内核的过程类似 === 更多的信息和选择 === * 对于不同的内核编译工具可以有更多的选择 * 因此至少简单的阅读一下工具的手册,知道它们可以干什么,这不失为一个好主意. 为此,可以输入: * $ man {toolname} for this. ---- 文章来源:官方WIKI <br> 翻译人员:cocos <br> 校对人员: <br> 文章状态:[[翻译完毕]]
返回
老旧文章/KernelBuildpackageDetailedHowto
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息