linux内核的编译(3)
2008-02-23 07:17:46来源:互联网 阅读 ()
无论什麽档名),然後将你做的 zImage 拷贝进去,(例如,如果你用” /vmlinuz ″
的话,就像这样″ cp zImage /vmlinuz ”)。
接著重新执行 lilo — 在较新的系统上,你可以只执行″ lilo ,″但是在较旧的系
统上,你可能必须执行 /etc/lilo/install 或甚至是
/ect/lilo/lilo -C /etc/lilo/config 。
如果你想知道更多有关於 lilo 的配置,或是你并没有 lilo 但是你想要安装的话,从
你喜欢的 ftp 节点拿最新的版本然後依说明行事。
要能够从硬碟启动你的旧核心其中之一的话(这是另一个在新核心出状况的情况下保护
你自己的方法),把 lilo 配置档中所有的(包括一行)″ image = xxx ″ 拷贝到档
案的最底端,然後把″ image = xxx ″改成″ image = yyy ,″其中的″ yyy ″是
你备份旧核心所存档的名字。接著,把″ lable = xXx ″改成像是” lable = linux-
backup。”然後重新执行 lilo 。
你可能得要加上一行″ delay = x ,″其中的 x 是以十分之一秒为单位的时间,这是
用来使 lilo 在启动前先等一下,所以你可以中断它的执行(例如用 shift 键)。然
後键入所备份的启动映像之 lable (在发生了某些令人不愉快的事情的情况下)。
3. 修补核心
3.1. 使用修补档
核心的小幅更新是以修补档的方式发行。例如,如果你的版本是 1.1.45 ,而且你注意
到出现了一个″ patch46.gz ″可以用来升级它,这代表你可以藉由使用这个修补档将
版本升级到 1.1.46 。你也许会想要先备份 source tree(″make clean ″然後″ cd
/usr/src; tar cvf linux | gzip -c > old-tree.tar.gz″将会为你造出一份 tar 压
缩档,里面就是整个原始程序码与其档案架构。)。
现在接著继续上面的例子,假设你已经取得了″ patch46.gz ″并放在 /usr/src 下。
cd 到 /usr/src 然後执行″ zcat patch46.gz | patch -p0 ″(如果并不是压缩过的
修补档,那麽就执行″ patch -p0 < patch46″)你将会看到许多东西飞逝而过(也许
它们会慢慢跳过,如果你的电脑真的很慢的话)告诉你它正试著应用 hunks ,以及是
否成功。
通常,这个过程快得无法仔细看清楚它的动作,所以你会无法确定它到底有没有成功地
执行。那麽就得找找看一些可能不是那麽顺利的事。cd 到 /usr/src/linux 并找寻档
名有 .reg 的档案。某些版本的修补档(比较旧的版本,它们可能是在比较早期的档案
系统上编译的)会把这些没有成功的操作记录在档名有 # 的档案里。你可以用
″ find ″来替你找;″ find . -name '*.reg' -print ″会处理这个工作。
如果一切正确无误的话,执行第二节跟第三节所讨论的″ 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 核心有许多在核心的原始程序码本身里面并没有说明的特性;这些特性一
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
相关文章