linux内核的编译( 五 )


如果一切正确无误的话,执行第二节跟第三节所讨论的″;make;clean;,″″;config
,″以及″;dep;″ 。
关於;patch;指令另外还有一些选项 。patch;-s;将会抑制除了错误以外的所有其他讯息
。如果你把核心原始程序码放在;/usr/src/linux;以外的地方,在该目录下用
patch;-p1;也可以乾净俐落的执行修补任务 。其它的;patch;选项在;manual;pages;里
都有很详细的描述 。
3.2.;如果有错误发生
通常最常发生的问题是当;patch;修改一个叫做″;config.in;″;的档案时,这个档案
看起来不怎麽对劲,因为你修改了一些选项来配合你的机器 。这个问题已经小心的注意
过了,但还是可能有人会在较旧的版本上遭遇这个问题 。
要修正这个问题的话,查看;config.in.rej;这个档案里留下些什麽讯息 。有修改过的
部份正常来说会在每一行开始的地方标上″; ;″和″;-;″ 。查看有标记的附近几行,
然後记得它们是设成″;y;″或是″;n; 。″现在编辑;config.in;档,然後在适当的地
方把″;y;″改成″;n;″以及″;n″改成″y″ 。
执行″;patch;-p0;<;config.in.rej;,″如果成功的话(没有错误),那麽你就完成
了 。这个;config.in.rej;档还是会留在那里,但是你可以砍掉它 。
如果你仍然遭遇其它问题,那麽可能是你安装了一份损坏的修补档 。如果;patch;显示
″;previously;applied;patch;detected:;Assume;-R?;,″你可能使用了一些比你目
前的版本编号还低的修补档(并不建议这样做) 。
要还原一个修补档的话,在原先的修补档上执行″;patch;-R;″ 。
当修补档真的失败的时候,最好的办法是从一个乾净的,out-of-the-box;source;tree
(例如从;linux-x.x.x.tar.gz;档案其中之一)开始,再重新执行 。
3.3.;砍掉;.orig;档案
只要做过几次修补以後,那些;.orig;的档案将会开始堆积 。例如,我的一个;1.1.51
版的;tree;最後一次做清扫是在;1.1.48;版(我想是吧) 。删除这些;.orig;档案会节
省许多的磁碟空间 。″;find;.;-name;"*.orig";-exec;rm;-f;{};";";″将会替你照料
这件事 。某些版本的修补档会用;tilde;来代替;.orig; 。
有其它(更好的?)的办法可砍掉这些;.orig;档 。用的最多的是以″;xargs;″来代替
″;-exec:;″″find;.;-name;"*.orig;|;xargs;rm;″或是″;find;.;-name;"*.orig"
-print0;|;xargs;--null;rm;--;″(後面这个比较安全 。) 。
3.4.;其它的修补档
总是会有一些并不是由;Linus;发行的其它修补档出现(我将称之为″非标准的″;) 。
如果你使用了它们,;Linus;的修补档可能会而无法正确地执行,那麽你不是得将它们
还原就是得因此而去修改原始程序码或是修补档 。这个工作对初学者通常是很讨厌,所
以,如果你对原始程序码没什麽研究,在使用;Linus;的修补档之前先还原这些非标准
的修补档 。
然後你可以看看这些非标准的修补档是否仍然可以执行 。如果不行的话,那麽你要不就
继续用旧的核心来修补以执行它们,要不就等别人发表能在你修补後的新核心上用的新
版非标准修补档 。
非标准的修补档有多普遍?你有可能曾经听过它们 。我使用;Bill;Paul;的不闪烁修补
档来;make;我虚拟控制台上的游标,因为我讨厌会闪烁的游标 。就我所知,到目前为止
这个特别的修补档的最新版本是给;1.0;版的核心使用的,但是我仍然在;1.1.51;版下
使用它;—;我已经修改了它好几次,因为它通常会搞乱;Linus;修补档的;driver/char/
console.c; 。
4.;附加的套件
你的;Linux;核心有许多在核心的原始程序码本身里面并没有说明的特性;这些特性一
般是经由外来的软体来利用,在这里列出一部分最普遍的:

推荐阅读