📄 1153.html
字号:
的 /etc/lilo/config 就是新版的 /etc/lilo.conf ),看看里面有些什麽,它会告诉 <br>
你像这样子的东西: <br>
image = /vmlinux <br>
label = Linux <br>
root = /dev/hda1 <br>
... <br>
首先,″ image = ″是设定为已经安装的核心。大部份的人似乎都用 /vmlinuz ,但 <br>
是我用 /vmlinux 。″ lable ″ 则是由 lilo 用来告诉你现在要启动的是那个核心或 <br>
作业系统,而″ root ″则是这个特别的作业系统的根目录 / 。备份一份旧的核心( <br>
无论什麽档名),然後将你做的 zImage 拷贝进去,(例如,如果你用” /vmlinuz ″ <br>
的话,就像这样″ cp zImage /vmlinuz ”)。 <br>
接著重新执行 lilo — 在较新的系统上,你可以只执行″ lilo ,″但是在较旧的系 <br>
统上,你可能必须执行 /etc/lilo/install 或甚至是 <br>
/ect/lilo/lilo -C /etc/lilo/config 。 <br>
如果你想知道更多有关於 lilo 的配置,或是你并没有 lilo 但是你想要安装的话,从 <br>
你喜欢的 ftp 节点拿最新的版本然後依说明行事。 <br>
要能够从硬碟启动你的旧核心其中之一的话(这是另一个在新核心出状况的情况下保护 <br>
你自己的方法),把 lilo 配置档中所有的(包括一行)″ image = xxx ″ 拷贝到档 <br>
案的最底端,然後把″ image = xxx ″改成″ image = yyy ,″其中的″ yyy ″是 <br>
你备份旧核心所存档的名字。接著,把″ lable = xXx ″改成像是” lable = linux- <br>
backup。”然後重新执行 lilo 。 <br>
你可能得要加上一行″ delay = x ,″其中的 x 是以十分之一秒为单位的时间,这是 <br>
用来使 lilo 在启动前先等一下,所以你可以中断它的执行(例如用 shift 键)。然 <br>
後键入所备份的启动映像之 lable (在发生了某些令人不愉快的事情的情况下)。 <br>
3. 修补核心 <br>
3.1. 使用修补档 <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>
现在接著继续上面的例子,假设你已经取得了″ patch46.gz ″并放在 /usr/src 下。 <br>
cd 到 /usr/src 然後执行″ zcat patch46.gz | patch -p0 ″(如果并不是压缩过的 <br>
修补档,那麽就执行″ patch -p0 <br>
它们会慢慢跳过,如果你的电脑真的很慢的话)告诉你它正试著应用 hunks ,以及是 <br>
否成功。 <br>
通常,这个过程快得无法仔细看清楚它的动作,所以你会无法确定它到底有没有成功地 <br>
执行。那麽就得找找看一些可能不是那麽顺利的事。cd 到 /usr/src/linux 并找寻档 <br>
名有 .reg 的档案。某些版本的修补档(比较旧的版本,它们可能是在比较早期的档案 <br>
系统上编译的)会把这些没有成功的操作记录在档名有 # 的档案里。你可以用 <br>
″ find ″来替你找;″ find . -name '*.reg' -print ″会处理这个工作。 <br>
如果一切正确无误的话,执行第二节跟第三节所讨论的″ make clean ,″″ config <br>
,″以及″ dep ″。 <br>
关於 patch 指令另外还有一些选项。patch -s 将会抑制除了错误以外的所有其他讯息 <br>
。如果你把核心原始程序码放在 /usr/src/linux 以外的地方,在该目录下用 <br>
patch -p1 也可以乾净俐落的执行修补任务。其它的 patch 选项在 manual pages 里 <br>
都有很详细的描述。 <br>
3.2. 如果有错误发生 <br>
通常最常发生的问题是当 patch 修改一个叫做″ config.in ″ 的档案时,这个档案 <br>
看起来不怎麽对劲,因为你修改了一些选项来配合你的机器。这个问题已经小心的注意 <br>
过了,但还是可能有人会在较旧的版本上遭遇这个问题。 <br>
要修正这个问题的话,查看 config.in.rej 这个档案里留下些什麽讯息。有修改过的 <br>
部份正常来说会在每一行开始的地方标上″ + ″和″ - ″。查看有标记的附近几行, <br>
然後记得它们是设成″ y ″或是″ n 。″现在编辑 config.in 档,然後在适当的地 <br>
方把″ y ″改成″ n ″以及″ n″改成″y″。 <br>
执行″ patch -p0 <br>
了。这个 config.in.rej 档还是会留在那里,但是你可以砍掉它。 <br>
如果你仍然遭遇其它问题,那麽可能是你安装了一份损坏的修补档。如果 patch 显示 <br>
″ previously applied patch detected: Assume -R? ,″你可能使用了一些比你目 <br>
前的版本编号还低的修补档(并不建议这样做)。 <br>
要还原一个修补档的话,在原先的修补档上执行″ patch -R ″。 <br>
当修补档真的失败的时候,最好的办法是从一个乾净的,out-of-the-box source tree <br>
(例如从 linux-x.x.x.tar.gz 档案其中之一)开始,再重新执行。 <br>
3.3. 砍掉 .orig 档案 <br>
只要做过几次修补以後,那些 .orig 的档案将会开始堆积。例如,我的一个 1.1.51 <br>
版的 tree 最後一次做清扫是在 1.1.48 版(我想是吧)。删除这些 .orig 档案会节 <br>
省许多的磁碟空间。″ find . -name '*.orig' -exec rm -f {} ';' ″将会替你照料 <br>
这件事。某些版本的修补档会用 tilde 来代替 .orig 。 <br>
有其它(更好的?)的办法可砍掉这些 .orig 档。用的最多的是以″ xargs ″来代替 <br>
″ -exec: ″″find . -name '*.orig | xargs rm ″或是″ find . -name '*.orig' <br>
-print0 | xargs --null rm -- ″(後面这个比较安全。)。 <br>
3.4. 其它的修补档 <br>
总是会有一些并不是由 Linus 发行的其它修补档出现(我将称之为″非标准的″ )。 <br>
如果你使用了它们, Linus 的修补档可能会而无法正确地执行,那麽你不是得将它们 <br>
还原就是得因此而去修改原始程序码或是修补档。这个工作对初学者通常是很讨厌,所 <br>
以,如果你对原始程序码没什麽研究,在使用 Linus 的修补档之前先还原这些非标准 <br>
的修补档。 <br>
然後你可以看看这些非标准的修补档是否仍然可以执行。如果不行的话,那麽你要不就 <br>
继续用旧的核心来修补以执行它们,要不就等别人发表能在你修补後的新核心上用的新 <br>
版非标准修补档。 <br>
非标准的修补档有多普遍?你有可能曾经听过它们。我使用 Bill Paul 的不闪烁修补 <br>
档来 make 我虚拟控制台上的游标,因为我讨厌会闪烁的游标。就我所知,到目前为止 <br>
这个特别的修补档的最新版本是给 1.0 版的核心使用的,但是我仍然在 1.1.51 版下 <br>
使用它 — 我已经修改了它好几次,因为它通常会搞乱 Linus 修补档的 driver/char/ <br>
console.c 。 <br>
4. 附加的套件 <br>
你的 Linux 核心有许多在核心的原始程序码本身里面并没有说明的特性;这些特性一 <br>
般是经由外来的软体来利用,在这里列出一部分最普遍的: <br>
4.1. kbd <br>
Linux 的控制台有著比你所能吃惊更多的特色。这包括切换字型,重新对映你的键盘, <br>
切换显示模式(比较新的核心)的能力等等。kbd 这套软体里有能够让使用者做这些动 <br>
作的支援程序,还加上一大堆的字型以及几乎足以适用任何键盘的一些键盘对映表。 <br>
4.2. hdparm <br>
像很多软体一样,这曾经是一个核心修补档及其支援程序。这些修补档被公认为核心的 <br>
一部分,而用来最佳化以及调适你硬碟的支援程序一般是分开发行的。 <br>
5. 一些陷阱 <br>
5.1. 清除 <br>
如果你的新核心会做一些真的很奇怪的事(这曾经发生在我身上),有可能是因为你忘 <br>
了做清除( make clean )。症状从你的核心不正常地崩溃到奇怪的输出入问题,一直 <br>
到可怜的执行效率等等不一而足,可以是任何事。最好也要确定你有做确认( make <br>
dep )。 <br>
5.2. 巨大或缓慢的核心 <br>
如果你的核心占用了大量的记忆体,或者它真的是很大很大,也或者是即使用你全新的 <br>
486DX6/440 来编译却都还像是永远编译不完的话,那麽有可能是因为你配置了太多不 <br>
必要的东西(设备驱动程序,文件系统等等)。如果你不会用到某些东西,那就不要配 <br>
置它,因为它真的会占用记忆体。 <br>
如果你的记忆体少於 16 Megs ,确定你在″ limit memory to low then 16MB ″这个 <br>
问题上回答的是″ y ″。这会造成很大的不同(尤其是只有在 4 MB 的系统上)最明 <br>
显的症状是记忆体与磁碟之间异常大量的资料交换。如果你的磁碟发出很多噪音,检查 <br>
一下你的核心配置。 <br>
你可以找出你机器上全部记忆体的数量,然後减掉 /proc/meminfo 里面的″ total <br>
mem ″或″ free ″指令所得的记忆体数量来得知核心使用了多少记忆体。你也可以执 <br>
行” dmesg ”(或者也可以查看核心的记录档,它一定在会你的系统里)。看起来就 <br>
像这一行: <br>
Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k <br>
data) <br>
我的 386(配置很少垃圾)显示如下: <br>
Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k <br>
data) <br>
5.3. 核心没有编译 <br>
如果它没有被编译,那麽可能是有个修补档失败了,或者是你从某个地方拿到的原始程 <br>
式码有问题。也有可能是因为你的 gcc 版本不正确或坏掉了。确定 Linus 在 README <br>
里所描述的符号链结都有正确建立。一般说来,如果核心没能编译,这表示在某些地方 <br>
有严重的错误。 <br>
5.4. 新版的核心似乎不能启动 <br>
没有执行 LILO ,或是没有正确的配置它。有一次我曾经碰到的问题是出在配置档里, <br>
我用了″ root = /dev/hda ″而不是″ root = /dev/hda1″(这在刚开始时真的是 <br>
很讨厌,但是一旦你有了一个可以用的配置档,应该不需要去再去改变它) <br>
5.5. 你忘了执行 lilo ,或系统根本不能启动 <br>
噢!现在最好的办法是用磁片启动,并且准备另一张可以启动的磁片(像是” make <br>
zdisk ”时做的磁片)。你得知道你的根目录( / )所在的分割区以及它的格式( <br>
second extended, minix 等等)在下面的例子中,你也得知道你的 /usr/src/linux <br>
source tree 在那个分割区,它的格式,以及它一般会挂在那儿。 <br>
在这个例子中, 根目录 / 是 /dev/hda1 ,而持有 /usr/src/linux 的分割区是 <br>
/dev/hda3 , 一般会挂在 /usr 下。它们都是 second extended 文件系统。可以运作 <br>
的核心映像叫做 zImage ,放在 /usr/src/linux 底下。 <br>
这个主意是这样的,假若有一个可以运作的核心映像叫做 zImage 在 /usr/src/linux <br>
下,可能可以把它用在新的磁片上。另外一个不一定会更好的变通办法(这跟你的系统 <br>
怎麽组成的有关)在说明这个例子之後会讨论到。 <br>
首先,从 boot/root 磁片或者是 rescue 磁片开机,然後将持有可运作核心的分割区 <br>
挂上来: <br>
mkdir /mnt <br>
mount -t ext2 /dev/hda3 /mnt <br>
如果 mkdir 指令显示该目录已经存在,忽略掉不必理会它。现在,cd 到持有可运作核 <br>
心的地方(注意: /mnt + /usr/src/linux - /usr = /mnt/src/inux )。把一张格式 <br>
化过的磁片放进 a: 磁碟机,(确定不是你的 boot/root 磁片!),把映像档倾倒到 <br>
磁片里去,然後配置你的根目录分割区。 <br>
cd /mnt/src/linux <br>
dd if=zImage of=/dev/fd0 <br>
rdev /dev/fd0 /dev/hda1 <br>
cd 到根目录 / 并且卸下标准 /usr 分割区: <br>
cd / <br>
umount /mnt <br>
你现在应该可以从这张磁片正常的开机了。在这次开机後不要忘记执行 lilo (或是其 <br>
它无论你曾经做错的什麽事)! <br>
如同前面曾经提过的,还有另外一种很普遍的变通方式。如果情况是你有一个可以运作 <br>
的核心在放在 / (例如 /vmlinuz ),你也可以使用它。假定所有的条件都跟上面的 <br>
例子一样,而我的核心映像是 /vmlinuz ,只要对上面的例子做这些改变: <br>
把 /dev/hda3 改成 /dev/hda1( / 分割区),把 /mnt/src/linux 改成 /mnt ,并且 <br>
把 if=zImage 改成 if=vmlinuz 。至於前面有关注意如何推导出 /mnt/src/linx 的那 <br>
个部分可以忽略。 <br>
5.6. 系统表示” Warning: bdflush not running” <br>
这可以算是一个相当严重的问题。从 1.0 版以後的核心开始(我记不清楚确实的版本 <br>
了,但大概是在 1994 年 4 月, 20 日左右),有个会周期性地更新文件系统缓冲区的 <br>
程序叫做″ update ”被升级或取代掉了。 <br>
取得″ bdflush ″的原始程序码(你应该可以从你取得核心的地方找到),然後编译 <br>
它(你可能会希望在旧版的核心下执行编译及安装)。它会以″ update ″为名安装它 <br>
自己,而在此之後你的新核心应该会运作良好。 <br>
5.7. 系统显示关於 obsolete routing requests 的奇怪讯息 <br>
取得新版的 route 程序,并且重新编译旧的要件。 /usr/src/linux/route.h (这是 <br>
/usr/src/linux 下的一个档案)已经做了修改。 <br>
6. □诀和技巧 <br>
6.1. 重导 make 或是 patch 指令的输出 <br>
如果你想要记录这些″ make ″或是″ patch ″ 指令到底做了些什麽,你可以把萤幕 <br>
的输出重导到一个档案去。首先,要知道你用的是是那一种 shell:″ grep root <br>
/etc/passwd″ 然後寻找看起来像″ /bin/csh ″一类的东西。 <br>
如果你使用的是 sh 或是 bash ,″ (command) 2>&1 | tee (output file) 。″将会 <br>
把一份 make 的输出放到″ (output file) ″这个档案去。 <br>
如果是 csh 或 bash,你应该使用″ (command) |& tee (output file) ″这个语法。 <br>
如果是 rc(注意:你应该不会是用 rc ),语法是″ (command) >[2=1] <br>
| tee (output file) 。" <br>
7. Misc <br>
7.1. Author <br>
The original revision was -0.1 on 3 October 1994 by Brian Ward <br>
(ward@blah.tu-graz.ac.at). Please send me any comments, additions, <br>
corrections, or computers. Corrections are, in particular, the most <br>
important to me! <br>
Even though I try to be attentive as possible with mail, please <br>
remember that I get a lot of mail per day, so it may take a little <br>
time to get back to you. Especially when emailing me with a question, <br>
please try extra hard to be clear and detailed in your message. I'd <br>
like to thank everyone who's given me feedback. <br>
7.2. History and other forms of this document <br>
I originally wrote this in ASCII, then I put some TeX around it, and <br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -