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

📄 kernel-howto.txt

📁 Linux百科宝典 书籍语言: 简体中文 书籍类型: 系统专区 授权方式: 免费软件 书籍大小: 1024 KB
💻 TXT
📖 第 1 页 / 共 4 页
字号:
   心的注意过了,但还是可能有人会在较旧的版本上遭遇这个问题. 要修正这个问   题的话,查看 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?', 你可能使用   了一些比你目前的版本编号还低的修补档; 如果你回答 `y',它会尝试将你的程   式码降级,而且几乎一定会失败; 如此,你就需要重新取得一份新的原始程式码      要还原到修补前的状态的话,在原先的修补档上执行 `patch -R'.      当修补档真的失败的时候,最好的办法是从一个乾净的原始程式码(例如从   linux-x.x.x.tar.gz 档案其中之一)开始,再重新执行.   5.3 砍掉 .orig 档案   只要做过几次修补以後,那些 .orig 的档案将会开始堆积. 例如,我的一个   1.1.51 版的程式码最後一次做清扫是在 1.1.48 版(我想是吧). 删除这些   .orig 档案会节省许多的磁碟空间.    find .  -name '*.orig' -exec rm -f {} ';'   将会替你照料这件事.某些版本的 patch 会用 ~ 来代替 .orig.      有其它更好的的办法可砍掉这些 .orig 档,就是利用 GNU 的 xargs:    find .  -name '*.orig' | xargs rm   或是更安全但有些罗嗦的方法:    find . -name '*.orig' -print0 | xargs --null rm --5.4 其它的修补档   有一些并不是由 Linus 发行的其它修补档出现(我将称之为``非标准的''). 如   果你使用了它们,Linus 的修补档可能会而无法正确地执行, 那麽你不是得将它   们还原就是得因此而去修改原始程式码或是修补档.这个工作对初学者通常是很   讨厌, 所以如果你不想去修改原始程式码(结果通常不大好),在使用 Linus 的   修补档之前先还原这些非标准的修补档,或重新安装新的程式码. 然後试试这非   标准的修补档能不能用.如果不能的话,那麽要不你就继续使用旧的核心, 试著   修改修补档使其能用,要不就等待(可能是乞求)新版非标准修补档出现.      非标准的修补档有多普遍? 你有可能曾经听过它们.我使用 Bill Paul 的不闪烁   修补档来修改我的虚拟控制台,因为我讨厌会闪烁的游标(这个修补档经常为新版   核心而更新). 由於大部份较新的设备驱动程式都已经被发展成可载入模组形式   ,因此许多非标准的修补档的重要性已逐渐降低.   6. 附加的套件   你的 Linux 核心有许多在原始程式码本身里面并没有说明的特性; 这些特性一   般是经由外来的软体来利用,在这里列出一部分最普遍的:   6.1 kbd   Linux 的控制台有著比你所能吃惊更多的特色.这包括切换字型,重新对映你的   键盘,切换显示模式(较新版的核心)的能力等等. kbd 这套软体里有能够让使用   者做这些动作的支援程式,还加上一大堆的字型以及几乎足以适用任何键盘的一   些键盘对映表. 它可在放置核心原始码的同一站台找到.   6.2 util-linux   Rik Faith ( [15]faith@cs.unc.edu) 收集了一大堆 Linux 的工具,叫做   util-linux. 现在是由 Nicolai Langfeldt ( [16]util-linux@math.uio.no)   所维护. 可从 sunsite.unc.edu 的 [17]/pub/Linux/system/misc 取得. 它包   括了像 setterm,rdev 以及 ctrlaltdel 与核心有关的工具. 就像 Rik 所说的   ,不要想都不想就把它装上去! 你不需要安装此套件中的每一个东西,而且如果   你这样做的话可能会引起严重的问题.   6.3 hdparm   像很多软体一样,这曾经是一个核心修补档及其支援程式. 这些修补档被放入商   业核心中,而用来最佳化以及调适你硬碟的支援程式一般是分开发行的.   6.4 gpm   gpm 是 general purpose mouse 的简写. 这个程式可以让你使用不同种类的滑   鼠在虚拟控制台之间剪贴,以及做一些其它的事情.   7. 一些陷阱7.1 make clean   如果你的新核心会做一些真的很奇怪的事,有可能是因为在编译核心前你忘了做   清除 make clean. 症状从你的核心不正常地崩溃到奇怪的输出入问题,一直到   可怜的执行效率等等不一而足,可以是任何事. 最好也要确定你有做 make dep   7.2 巨大或缓慢的核心   如果你的核心占用了大量的记忆体,或者它真的是很大很大,也或者是即使用你   全新的 786DX6/440 来编译却都还像是永远编译不完的话, 那麽有可能是因为你   配置了太多不必要的东西(设备驱动程式,档案系统等等). 如果你不会用到某些   东西,那就不要配置它,因为它真的会占用记忆体. 核心过於臃肿最明显的症状   就是发生记忆体与磁碟之间异常大量的资料交换. 如果你不是用那种声音听起来   好像是喷射机降落的旧型 Fujitsu Eagles 硬碟,检查一下你的核心配置.      你可以找出你机器上全部记忆体的数量,然後减掉 /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)      如果你`必须'得到一大型核心但系统却不让你做,你可以试试 `make bzimage'.   你可能必须安装新版的 LILO 来做这件事.   7.3 核心无法编译   如果它没有被编译,那麽可能是有个修补档失败了,或者是你从某个地方拿到的   原始程式码有问题. 也有可能是因为你的 gcc 版本不正确或坏掉了(例如含入档   有错误). 确定 Linus 在 README 里所描述的符号链结都有正确建立. 一般说   来,如果核心没能编译,这表示在某些地方有严重的错误,重新安装某些工具可   能是必须的.      或者可能你用 ELF 编译器 (gcc 2.6.3 或以後的) 来编译 1.2.x 的核心. 如果   编译过程中你得到一大堆的 xxxx undefined 的讯息,这可能是你的问题. 修正   的方法大部份都很简单.将这几行加到 arch/i386/Makefile 的顶端:   arch/i386/Makefile:AS=/usr/i486-linuxaout/bin/asLD=/usr/i486-linuxaout/bin/ld -m i386linuxCC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include   然後重新执行 make dep 与 zImage.      在少数情况下,gcc 可能会由於硬体问题而当掉.错误讯息会像 ``xxx exited   with signal 15'' 之类的,而且会看起来很奇怪. 我本来不想提这点的,不过   在我身上也发生过一次 - 我有一些坏的 cache 记忆体,编译器时常会随机地当   掉. 如果你有此问题的话先试著重新安装 gcc.如果你将外部 cache 关掉,减   少一些 RAM 之後核心就编译成功了,你大概只会觉得可疑.      告诉人们他的硬体有问题常会使人困扰.不过,这不是我发明的. 这是一个   FAQ -- 可以在 [18]http://www.bitwizard.nl/sig11/ 找到.   7.4 新版的核心似乎不能启动   你没有执行 LILO ,或是没有正确的配置它.有一次我曾经碰到的问题是出在配   置档里, 我用了 `boot = /dev/hda1' 而不是 `boot = /dev/hda' (这在刚开始   时真的是很讨厌,但是一旦你有了一个可以用的配置档,应该不需要去再去改变   它).   7.5 你忘了执行 LILO,或系统根本不能启动   噢!现在最好的办法是用磁片启动,并且准备另一张可以启动的磁片(像是`make   zdisk'时做的磁片). 你得知道你的根目录(/)所在的分割区以及它的格   式(second extended, minix 等等). 在下面的例子中,你也得知道你的   /usr/src/linux 原始程式码在那个分割区,它的格式,以及它一般会挂在那儿.      在这个例子中, 根目录 / 是 /dev/hda1,而持有 /usr/src/linux 的分割区是   /dev/hda3,一般会挂在 /usr 下. 它们都是 second extended 档案系统.可以   运作的核心映像叫做 zImage ,放在 /usr/src/linux/arch/i386/boot 底下.      这个主意是这样的,假若有一个可以运作的核心映像叫做 zImage,可能可以把它   用在新的磁片上. 另外一个不一定会更好的变通办法(这跟你的系统怎麽组成的   有关)在说明这个例子之後会讨论到.      首先,从 boot/root 磁片或者是急救磁片开机,然後将持有可运作核心的分割区   挂上来:       mkdir /mnt    mount -t ext2 /dev/hda3 /mnt   如果 mkdir 指令显示该目录已经存在,忽略掉不必理会它. 现在,cd 到持有可   运作核心的地方.注意:/mnt + /usr/src/linux/arch/i386/boot - /usr = /mnt/src/linux/arch/i386/boot   把一张格式化过的磁片放进 ``A:'' 磁碟机(确定不是你的 boot/root 磁片!),   把映像档倾倒到磁片里去,然後配置你的根目录分割区:       cd /mnt/src/linux/arch/i386/boot    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/linux/arch/i386/boot 的那个部分可以忽略.      将 LILO 使用在大的硬碟上(超过 1024 磁柱)可能会有问题. 请参见 LILO   mini-HOWTO 或其它文件的说明.   7.6 系统表示 `warning: bdflush not running'   这可以算是一个相当严重的问题.从 1.0 版以後的核心开始(大概是在 1994 年   四月二十日左右), 有个会周期性地更新档案系统缓冲区的程式叫做 `update'   被升级或取代掉了. 取得 `bdflush' 的原始程式码(你应该可以从你取得核心的   地方找到), 然後编译它(你可能会希望在旧版的核心下执行编译及安装). 它会   以 `update' 为名安装它自己并且在重开机以後,新核心应该会运作良好.   7.7 系统说 undefined symbols 而且无法编译   你可能有一 ELF 编译器(gcc 2.6.3 或以後的)而且是 1.2.x (或更早的)核心原   始码. 一般修正的方法是将这几行加到 arch/i386/Makefile 的顶端:   AS=/usr/i486-linuxaout/bin/asLD=/usr/i486-linuxaout/bin/ld -m i386linuxCC=gcc -b i486-linuxaout -D__KERNEL__ -I$(TOPDIR)/include   这会以 a.out 程式库来编译 1.2.x 核心.   7.8 无法让我的 IDE/ATAPI CD-ROM 正常工作   很奇怪,一大堆人无法让他们的 ATAPI 光碟机工作,可能是因为有太多事容易出   错.      你的光碟机是在一特别 IDE 界面上的唯一设备,它必须被调整为 ``master'' 或   ``single''. 这可能是最常见的错误.      Creative Labs 现在将 IDE 界面放到他们音效卡里. 然而,这将导致一个有趣   的问题,虽然有些人只有一个 IDE 界面,许多人在主机板上有两个内建的 IDE   界面(通常在 IRQ15), 因此一解决的办法是将声霸卡的界面调成第三个 IDE (有   人告诉我是 IRQ11).      这在 1.2.x 的 Linux 核心上会有问题,因为它不支援第三个 IDE 界面(从   1.3.x 系列已开始支援,但它还在发展中,而且不会自动侦测). 要解决此问题   ,你有一些选择.      如果你已经有第二个 IDE 埠,如果你没用它或没有两部设备在上面的话就有机会   . 将 ATAPI 光碟机从音效卡上拿下来并放到第二个界面上.然後你可以关掉音   效卡上的界面,这就可以省下一个 IRQ.      如果你没有第二个 IDE 界面,调整音效卡的界面(不是音效卡的音效部份)到第二   界面用的 IRQ15,这样应该会动.      如果因为某些理由非得使用``第三个''界面不可,或是有其它问题, 取得   1.3.x 的核心(例如 1.3.57 就有),阅读 drivers/block/README.ide 档案. 那   里有更多的资讯说明.   7.9 系统显示关於 obsolete routing requests 的奇怪讯息   取得新版的 route 程式及其它与 route 有关的程式.   /usr/include/linux/route.h (这是 /usr/src/linux 下的一个档案)已经做了修   改.   7.10 防火墙功能无法在 1.2.0 上工作   至少升级到 1.2.1 版.   7.11 ``Not a compressed kernel Image file'' (非压缩核心映像档)   不要用在 /usr/src/linux 产生的 vmlinux 做为你的启动核心映像;   [..]/arch/i386/boot/zImage 才是正确的.   7.12 升级至 1.3.x 後在控制台终端机上的问题   将控制台设定档 /etc/termcap 中的 dumb 改为 linux. 你可能会必须增加一项   terminfo.   7.13 核心升级後似乎无法编译东西   Linux 的核心原始程式码包含了许多的含入档(就是用 .h 结尾的档案)必须为标   准的 /usr/include 所参考. 它们通常用这种方法被参考(其中 xyzzy.h 是在   /usr/include/linux 下):    #include <linux/xyzzy.h>   正常情况下,在 /usr/include 下会有一叫做 linux 的连结到你的核心原始码的   include/linux 目录(一般系统在 /usr/src/linux/include/linux). 如果这个   连结没有了,或指到错误的地方,大部份的东西都将无法编译. 如果你觉得核心   原始码占了太多的空间而砍掉它,这显然会引发问题. 另一个可能的错误是它的   档案权限; 如果你的 root 预设不让其它使用者看到他的档案, 而且你解开核心   原始码时没有加上 p (保留档案模式)选项,其它使用者也会无法使用 C 编译器   . 虽然你可以用 chmod 指令来修正,不过更容易的方法是重新解开含入档. 你   可以一开始你解开整个原始码的同样方法,不过多加了一个参数:    blah# tar zxvpf linux.x.y.z.tar.gz linux/include   请注意: 如果 /usr/src/linux 连结不在的话 ``make config'' 会重建之.   7.14 增加上限

⌨️ 快捷键说明

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