⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux.txt

📁 关于黑客的论坛的下载资料
💻 TXT
📖 第 1 页 / 共 3 页
字号:
5.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 档案其中之一)开始,再重新执行。
5.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 -- ″(後面这个比较安全。)。
5.4. 其它的修补档
总是会有一些并不是由 Linus 发行的其它修补档出现(我将称之为″非标准的″ )。
如果你使用了它们, Linus 的修补档可能会而无法正确地执行,那麽你不是得将它们
还原就是得因此而去修改原始程式码或是修补档。这个工作对初学者通常是很讨厌,所
以,如果你对原始程式码没什麽研究,在使用 Linus 的修补档之前先还原这些非标准
的修补档。
然後你可以看看这些非标准的修补档是否仍然可以执行。如果不行的话,那麽你要不就
继续用旧的核心来修补以执行它们,要不就等别人发表能在你修补後的新核心上用的新
版非标准修补档。
非标准的修补档有多普遍?你有可能曾经听过它们。我使用 Bill Paul 的不闪烁修补
档来 make 我虚拟控制台上的游标,因为我讨厌会闪烁的游标。就我所知,到目前为止
这个特别的修补档的最新版本是给 1.0 版的核心使用的,但是我仍然在 1.1.51 版下
使用它 — 我已经修改了它好几次,因为它通常会搞乱 Linus 修补档的 driver/char/
console.c 。
6. 附加的套件
你的 Linux 核心有许多在核心的原始程式码本身里面并没有说明的特性;这些特性一
般是经由外来的软体来利用,在这里列出一部分最普遍的:
6.1. kbd
Linux 的控制台有著比你所能吃惊更多的特色。这包括切换字型,重新对映你的键盘,
切换显示模式(比较新的核心)的能力等等。kbd 这套软体里有能够让使用者做这些动
作的支援程式,还加上一大堆的字型以及几乎足以适用任何键盘的一些键盘对映表。
6.2. hdparm
像很多软体一样,这曾经是一个核心修补档及其支援程式。这些修补档被公认为核心的
一部分,而用来最佳化以及调适你硬碟的支援程式一般是分开发行的。
7. 一些陷阱
7.1. 清除
如果你的新核心会做一些真的很奇怪的事(这曾经发生在我身上),有可能是因为你忘
了做清除( make clean )。症状从你的核心不正常地崩溃到奇怪的输出入问题,一直
到可怜的执行效率等等不一而足,可以是任何事。最好也要确定你有做确认( make
dep )。
7.2. 巨大或缓慢的核心
如果你的核心占用了大量的记忆体,或者它真的是很大很大,也或者是即使用你全新的
 486DX6/440 来编译却都还像是永远编译不完的话,那麽有可能是因为你配置了太多不
必要的东西(设备驱动程式,档案系统等等)。如果你不会用到某些东西,那就不要配
置它,因为它真的会占用记忆体。
如果你的记忆体少於 16 Megs ,确定你在″ limit memory to low then 16MB ″这个
问题上回答的是″ y ″。这会造成很大的不同(尤其是只有在 4 MB 的系统上)最明
显的症状是记忆体与磁碟之间异常大量的资料交换。如果你的磁碟发出很多噪音,检查
一下你的核心配置。
你可以找出你机器上全部记忆体的数量,然後减掉 /proc/meminfo 里面的″ total
mem ″或″ free ″指令所得的记忆体数量来得知核心使用了多少记忆体。你也可以执
行” dmesg ”(或者也可以查看核心的记录档,它一定在会你的系统里)。看起来就
像这一行:
Memory: 15124k/16384k available (552k kernel code, 384k reserved, 324k
data)
我的 386(配置很少垃圾)显示如下:
Memory: 7000k/8192k available (496k kernel code, 384k reserved, 312k
data)
7.3. 核心没有编译
如果它没有被编译,那麽可能是有个修补档失败了,或者是你从某个地方拿到的原始程
式码有问题。也有可能是因为你的 gcc 版本不正确或坏掉了。确定 Linus 在 README
里所描述的符号链结都有正确建立。一般说来,如果核心没能编译,这表示在某些地方
有严重的错误。
7.4. 新版的核心似乎不能启动
没有执行 LILO ,或是没有正确的配置它。有一次我曾经碰到的问题是出在配置档里,
我用了″ root = /dev/hda ″而不是″  root = /dev/hda1″(这在刚开始时真的是
很讨厌,但是一旦你有了一个可以用的配置档,应该不需要去再去改变它)
7.5. 你忘了执行 lilo ,或系统根本不能启动
噢!现在最好的办法是用磁片启动,并且准备另一张可以启动的磁片(像是” make
zdisk ”时做的磁片)。你得知道你的根目录( / )所在的分割区以及它的格式(
second extended, minix 等等)在下面的例子中,你也得知道你的 /usr/src/linux
source tree 在那个分割区,它的格式,以及它一般会挂在那儿。
在这个例子中, 根目录 / 是 /dev/hda1 ,而持有 /usr/src/linux 的分割区是
/dev/hda3 , 一般会挂在 /usr 下。它们都是 second extended 档案系统。可以运作
的核心映像叫做 zImage ,放在 /usr/src/linux 底下。
这个主意是这样的,假若有一个可以运作的核心映像叫做 zImage 在 /usr/src/linux
下,可能可以把它用在新的磁片上。另外一个不一定会更好的变通办法(这跟你的系统
怎麽组成的有关)在说明这个例子之後会讨论到。
首先,从 boot/root 磁片或者是 rescue 磁片开机,然後将持有可运作核心的分割区
挂上来:
mkdir /mnt
mount -t ext2 /dev/hda3 /mnt
如果 mkdir 指令显示该目录已经存在,忽略掉不必理会它。现在,cd 到持有可运作核
心的地方(注意: /mnt + /usr/src/linux - /usr = /mnt/src/inux )。把一张格式
化过的磁片放进 a: 磁碟机,(确定不是你的 boot/root 磁片!),把映像档倾倒到
磁片里去,然後配置你的根目录分割区。
cd /mnt/src/linux
dd if=zImage of=/dev/fd0
rdev /dev/fd0 /dev/hda1
cd 到根目录 / 并且卸下标准 /usr 分割区:
cd /
umount /mnt
你现在应该可以从这张磁片正常的开机了。在这次开机後不要忘记执行 lilo (或是其
它无论你曾经做错的什麽事)!
如同前面曾经提过的,还有另外一种很普遍的变通方式。如果情况是你有一个可以运作
的核心在放在 / (例如 /vmlinuz ),你也可以使用它。假定所有的条件都跟上面的
例子一样,而我的核心映像是 /vmlinuz ,只要对上面的例子做这些改变:
把 /dev/hda3 改成 /dev/hda1( / 分割区),把 /mnt/src/linux 改成 /mnt ,并且
把 if=zImage 改成 if=vmlinuz 。至於前面有关注意如何推导出 /mnt/src/linx 的那
个部分可以忽略。
7.6. 系统表示” Warning: bdflush not running”
这可以算是一个相当严重的问题。从 1.0 版以後的核心开始(我记不清楚确实的版本
了,但大概是在 1994 年 4 月, 20 日左右),有个会周期性地更新档案系统缓冲区的
程式叫做″ update ”被升级或取代掉了。
取得″ bdflush ″的原始程式码(你应该可以从你取得核心的地方找到),然後编译
它(你可能会希望在旧版的核心下执行编译及安装)。它会以″ update ″为名安装它
自己,而在此之後你的新核心应该会运作良好。
7.7. 系统显示关於 obsolete routing requests 的奇怪讯息
取得新版的 route 程式,并且重新编译旧的要件。 /usr/src/linux/route.h (这是
/usr/src/linux 下的一个档案)已经做了修改。
8. 秘诀和技巧
8.1. 重导 make 或是 patch 指令的输出
如果你想要记录这些″ make ″或是″ patch ″ 指令到底做了些什麽,你可以把萤幕
的输出重导到一个档案去。首先,要知道你用的是是那一种 shell:″ grep root
/etc/passwd″ 然後寻找看起来像″ /bin/csh ″一类的东西。
如果你使用的是 sh 或是 bash ,″ (command) 2>&1 | tee (output file) 。″将会
把一份 make 的输出放到″ (output file) ″这个档案去。
如果是 csh 或 bash,你应该使用″ (command) |& tee (output file) ″这个语法。
如果是 rc(注意:你应该不会是用 rc ),语法是″ (command) >[2=1]
| tee (output file) 。"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -