📄 00000004.htm
字号:
能会希望在每次修补的时候执行它。″ make zlilo ″将会安装核心,然後对它执行 <BR>LILO ,使你完成所有开机的准备,但是这只有在 lilo 已经以下列这种方式配置好的 <BR>时候才可以:核心为 /vmlinuz , lilo 在 /sbin 下,而且与你的 lilo 配置一致。 <BR> <BR>4.4. 安装核心 <BR> <BR>在你已经获得一个看起来能够照你希望运作的新核心之後,现在是安装它的时候了。大 <BR>大部份的人使用 LILO( Linux Loader )来做这件事。这是一个相当容易安装的软体 <BR>,然而,它会因为配置档而困扰人们。如果你没有最新的版本,查看配置档(不是旧版 <BR>的 /etc/lilo/config 就是新版的 /etc/lilo.conf ),看看里面有些什麽,它会告诉 <BR>你像这样子的东西: <BR> <BR> image = /vmlinux <BR> label = Linux <BR> root = /dev/hda1 <BR> ... <BR> <BR>首先,″ image = ″是设定为已经安装的核心。大部份的人似乎都用 /vmlinuz ,但 <BR>是我用 /vmlinux 。″ lable ″ 则是由 lilo 用来告诉你现在要启动的是那个核心或 <BR>作业系统,而″ root ″则是这个特别的作业系统的根目录 / 。备份一份旧的核心( <BR>无论什麽档名),然後将你做的 zImage 拷贝进去,(例如,如果你用” /vmlinuz ″ <BR>的话,就像这样″ cp zImage /vmlinuz ”)。 <BR> <BR>接著重新执行 lilo — 在较新的系统上,你可以只执行″ lilo ,″但是在较旧的系 <BR>统上,你可能必须执行 /etc/lilo/install 或甚至是 <BR>/ect/lilo/lilo -C /etc/lilo/config 。 <BR> <BR>如果你想知道更多有关於 lilo 的配置,或是你并没有 lilo 但是你想要安装的话,从 <BR>你喜欢的 ftp 节点拿最新的版本然後依说明行事。 <BR> <BR>要能够从硬碟启动你的旧核心其中之一的话(这是另一个在新核心出状况的情况下保护 <BR>你自己的方法),把 lilo 配置档中所有的(包括一行)″ image = xxx ″ 拷贝到档 <BR>案的最底端,然後把″ image = xxx ″改成″ image = yyy ,″其中的″ yyy ″是 <BR>你备份旧核心所存档的名字。接著,把″ lable = xXx ″改成像是” lable = linux- <BR>backup。”然後重新执行 lilo 。 <BR> <BR>你可能得要加上一行″ delay = x ,″其中的 x 是以十分之一秒为单位的时间,这是 <BR>用来使 lilo 在启动前先等一下,所以你可以中断它的执行(例如用 shift 键)。然 <BR>後键入所备份的启动映像之 lable (在发生了某些令人不愉快的事情的情况下)。 <BR> <BR>5. 修补核心 <BR> <BR>5.1. 使用修补档 <BR> <BR>核心的小幅更新是以修补档的方式发行。例如,如果你的版本是 1.1.45 ,而且你注意 <BR>到出现了一个″ patch46.gz ″可以用来升级它,这代表你可以藉由使用这个修补档将 <BR>版本升级到 1.1.46 。你也许会想要先备份 source tree(″make clean ″然後″ cd <BR>/usr/src; tar cvf linux | gzip -c > old-tree.tar.gz″将会为你造出一份 tar 压 <BR>缩档,里面就是整个原始程式码与其档案架构。)。 <BR> <BR>现在接著继续上面的例子,假设你已经取得了″ patch46.gz ″并放在 /usr/src 下。 <BR>cd 到 /usr/src 然後执行″ zcat patch46.gz | patch -p0 ″(如果并不是压缩过的 <BR>修补档,那麽就执行″ patch -p0 < patch46″)你将会看到许多东西飞逝而过(也许 <BR>它们会慢慢跳过,如果你的电脑真的很慢的话)告诉你它正试著应用 hunks ,以及是 <BR>否成功。 <BR> <BR>通常,这个过程快得无法仔细看清楚它的动作,所以你会无法确定它到底有没有成功地 <BR>执行。那麽就得找找看一些可能不是那麽顺利的事。cd 到 /usr/src/linux 并找寻档 <BR>名有 .reg 的档案。某些版本的修补档(比较旧的版本,它们可能是在比较早期的档案 <BR>系统上编译的)会把这些没有成功的操作记录在档名有 # 的档案里。你可以用 <BR>″ find ″来替你找;″ find . -name '*.reg' -print ″会处理这个工作。 <BR> <BR>如果一切正确无误的话,执行第二节跟第三节所讨论的″ make clean ,″″ config <BR>,″以及″ dep ″。 <BR> <BR>关於 patch 指令另外还有一些选项。patch -s 将会抑制除了错误以外的所有其他讯息 <BR>。如果你把核心原始程式码放在 /usr/src/linux 以外的地方,在该目录下用 <BR>patch -p1 也可以乾净俐落的执行修补任务。其它的 patch 选项在 manual pages 里 <BR>都有很详细的描述。 <BR> <BR>5.2. 如果有错误发生 <BR> <BR>通常最常发生的问题是当 patch 修改一个叫做″ config.in ″ 的档案时,这个档案 <BR>看起来不怎麽对劲,因为你修改了一些选项来配合你的机器。这个问题已经小心的注意 <BR>过了,但还是可能有人会在较旧的版本上遭遇这个问题。 <BR> <BR>要修正这个问题的话,查看 config.in.rej 这个档案里留下些什麽讯息。有修改过的 <BR>部份正常来说会在每一行开始的地方标上″ + ″和″ - ″。查看有标记的附近几行, <BR>然後记得它们是设成″ y ″或是″ n 。″现在编辑 config.in 档,然後在适当的地 <BR>方把″ y ″改成″ n ″以及″ n″改成″y″。 <BR> <BR>执行″ patch -p0 < config.in.rej ,″如果成功的话(没有错误),那麽你就完成 <BR>了。这个 config.in.rej 档还是会留在那里,但是你可以砍掉它。 <BR> <BR>如果你仍然遭遇其它问题,那麽可能是你安装了一份损坏的修补档。如果 patch 显示 <BR>″ previously applied patch detected: Assume -R? ,″你可能使用了一些比你目 <BR>前的版本编号还低的修补档(并不建议这样做)。 <BR> <BR>要还原一个修补档的话,在原先的修补档上执行″ patch -R ″。 <BR> <BR>当修补档真的失败的时候,最好的办法是从一个乾净的,out-of-the-box source tree <BR>(例如从 linux-x.x.x.tar.gz 档案其中之一)开始,再重新执行。 <BR> <BR>5.3. 砍掉 .orig 档案 <BR> <BR>只要做过几次修补以後,那些 .orig 的档案将会开始堆积。例如,我的一个 1.1.51 <BR>版的 tree 最後一次做清扫是在 1.1.48 版(我想是吧)。删除这些 .orig 档案会节 <BR>省许多的磁碟空间。″ find . -name '*.orig' -exec rm -f {} ';' ″将会替你照料 <BR>这件事。某些版本的修补档会用 tilde 来代替 .orig 。 <BR> <BR>有其它(更好的?)的办法可砍掉这些 .orig 档。用的最多的是以″ xargs ″来代替 <BR>″ -exec: ″″find . -name '*.orig | xargs rm ″或是″ find . -name '*.orig' <BR> -print0 | xargs --null rm -- ″(後面这个比较安全。)。 <BR> <BR>5.4. 其它的修补档 <BR> <BR>总是会有一些并不是由 Linus 发行的其它修补档出现(我将称之为″非标准的″ )。 <BR>如果你使用了它们, Linus 的修补档可能会而无法正确地执行,那麽你不是得将它们 <BR>还原就是得因此而去修改原始程式码或是修补档。这个工作对初学者通常是很讨厌,所 <BR>以,如果你对原始程式码没什麽研究,在使用 Linus 的修补档之前先还原这些非标准 <BR>的修补档。 <BR> <BR>然後你可以看看这些非标准的修补档是否仍然可以执行。如果不行的话,那麽你要不就 <BR>继续用旧的核心来修补以执行它们,要不就等别人发表能在你修补後的新核心上用的新 <BR>版非标准修补档。 <BR> <BR>非标准的修补档有多普遍?你有可能曾经听过它们。我使用 Bill Paul 的不闪烁修补 <BR>档来 make 我虚拟控制台上的游标,因为我讨厌会闪烁的游标。就我所知,到目前为止 <BR>这个特别的修补档的最新版本是给 1.0 版的核心使用的,但是我仍然在 1.1.51 版下 <BR>使用它 — 我已经修改了它好几次,因为它通常会搞乱 Linus 修补档的 driver/char/ <BR>console.c 。 <BR> <BR>6. 附加的套件 <BR> <BR>你的 Linux 核心有许多在核心的原始程式码本身里面并没有说明的特性;这些特性一 <BR>般是经由外来的软体来利用,在这里列出一部分最普遍的: <BR> <BR>6.1. kbd <BR> <BR>Linux 的控制台有著比你所能吃惊更多的特色。这包括切换字型,重新对映你的键盘, <BR>切换显示模式(比较新的核心)的能力等等。kbd 这套软体里有能够让使用者做这些动 <BR>作的支援程式,还加上一大堆的字型以及几乎足以适用任何键盘的一些键盘对映表。 <BR> <BR>6.2. hdparm <BR> <BR>像很多软体一样,这曾经是一个核心修补档及其支援程式。这些修补档被公认为核心的 <BR>一部分,而用来最佳化以及调适你硬碟的支援程式一般是分开发行的。 <BR> <BR>7. 一些陷阱 <BR> <BR>7.1. 清除 <BR> <BR>如果你的新核心会做一些真的很奇怪的事(这曾经发生在我身上),有可能是因为你忘 <BR>了做清除( make clean )。症状从你的核心不正常地崩溃到奇怪的输出入问题,一直 <BR>到可怜的执行效率等等不一而足,可以是任何事。最好也要确定你有做确认( make <BR>dep )。 <BR> <BR>7.2. 巨大或缓慢的核心 <BR> <BR>如果你的核心占用了大量的记忆体,或者它真的是很大很大,也或者是即使用你全新的 <BR> 486DX6/440 来编译却都还像是永远编译不完的话,那麽有可能是因为你配置了太多不 <BR>必要的东西(设备驱动程式,档案系统等等)。如果你不会用到某些东西,那就不要配 <BR>置它,因为它真的会占用记忆体。 <BR> <BR>如果你的记忆体少於 16 Megs ,确定你在″ limit memory to low then 16MB ″这个 <BR>问题上回答的是″ y ″。这会造成很大的不同(尤其是只有在 4 MB 的系统上)最明 <BR>显的症状是记忆体与磁碟之间异常大量的资料交换。如果你的磁碟发出很多噪音,检查 <BR>一下你的核心配置。 <BR> <BR>你可以找出你机器上全部记忆体的数量,然後减掉 /proc/meminfo 里面的″ total <BR>mem ″或″ free ″指令所得的记忆体数量来得知核心使用了多少记忆体。你也可以执 <BR>行” dmesg ”(或者也可以查看核心的记录档,它一定在会你的系统里)。看起来就 <BR>像这一行: <BR> <BR>Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k <BR>data) <BR> <BR>我的 386(配置很少垃圾)显示如下: <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -