📄 kerneld.html
字号:
<H3><A NAME="pre_post"></A>要载入超过一个模组时:“post-install”项目</H3><P>有时,只把模组载入不足以使设备运作。例如,如果你把音效卡编译为模组,你也会希望调整至适当音量。问题题你的设定在下次载入时便会失去。这里是由 Ben Galliart (bgallia@luc.edu) 提供的秘诀:</P><PRE><I> 最终的解决方法需要安装 setmix-0.1 ( ftp://sunsite.unc.edu/pub/Linux/apps/sound/mixers/setmix-0.1.tar.gz ) 之後把以下一行加到我的 /etc/conf.modules: post-install sound /usr/local/bin/setmix -f /etc/volume.conf</I></PRE><P>这样,当音效的模组载入後,kerneld 会执行 'post-install sound' 项目的指令。因此该模组会被 '/usr/local/bin/setmix -f /etc/volume.conf 指令设定好。</P><P>这方法对其他模组也有用,例如 lp 模组可籍以下一句用 tunelp 程式设定好:</P><PRE><TT> post-install lp tunelp <options></TT></PRE><P>只有 1.3.69f 版或之後的 kerneld 才支援这些选项。</P><P><B>注意</B>: :此 mini-HOWTO 的较旧版本曾提及一个 "pre-remove" 选项,让你可在 kerneld 卸下一个模组时执行一个指令。但这从未成功,因此并不鼓励使用。这个选项多数会在未来版本的 kerneld 中消失。所有有关模组 "设定" 的事情都在改变中,在你看到这文件时,可能已有所不同了。</P><P><HR></P><H2><A NAME="Spying"></A>侦察 kerneld</H2><P>如果你什麽方法都已试过,但仍找不出核心在要在 kerneld 做什麽,你可用一个方法找出 kerneld 收到什麽要求,从而知道该加什麽到 /etc/conf.modules。你需要 kdstat 程式。</P><P>这个好用的程式已包括在 modules-package 中,但预定是不会编译及安装的。你可用以下方法建立它:</P><PRE><TT> cd /usr/src/modules-2.0.0/kerneld make kdstat</TT></PRE><P>之後,要使 kerneld 显示它正在做什麽,执行 </P><PRE><TT> kdstat debug</TT></PRE><P>kerneld 便会开始在主控台印出其工作的资料。当你执行所需的指令时,你会见到 kerneld 收到的要求。这些要求可放到 /etc/conf.modules 中,加上所需模组的别名 (alias),便可使工作完成。</P><P>要停止除错时,执行 '/sbin/kdstat nodebug'。</P><P><HR></P><H2><A NAME="Goodies"></A>kerneld 的特殊用途</H2><P>我知道你想问如何设定萤幕保护程式 (screensaver) 的模组…</P><P>modules-package 的 'kerneld/GOODIES' 目录中有一些和萤幕保护程式及主控台哔声支援有关的核心修补 (kernel patches)。它们尚未在官方的核心出现。所以你要自行修正及重新编译核心。</P><P>要安装修补,你要用 "patch" 指令:</P><PRE><TT> cd /usr/src/linux patch -s -p1 </usr/src/modules-2.0.0/kerneld/GOODIES/blanker_patch</TT></PRE><P>之後重建安装新核心。</P><P>当萤幕保护程式启动时,kerneld 会执行 "/sbin/screenblanker" 指令。这可以是一个执行你喜欢的萤幕保护程式的命令手稿 (shell script)。</P><P>在核心想重绘萤幕时,它会送出一个 SIGQUIT 讯号到正执行 /sbin/screenblanker 的行程 (process)。你的命令稿或萤幕保护程式要捕捉 (trap) 这讯号及结□。记著之後还要把萤幕还原到原本的文字模式 (text mode)。</P><P><HR></P><H2><A NAME="CommonProblems"></A>常见问题及你可能怀疑的事情</H2><H3>为何当我执行 ifconfig 时为何我会得到 "Cannot locate module for net-pf-X" 讯息</H3><P>在核心 1.3.80 左右,网络的程式修改至容许把通诉协定 (protocol families,如 IPX, AX.25 和 AppleTalk) 载入为模组。这导致额外的 kerneld 要求:net-pf-X,X 是一个用以辨别通讯协定的数字(参看 /usr/src/linux/include/linux/socket.h 来找出不同数字的意思)。<BR> 不幸地,ifconfig 会意外地造成这些讯息,所以很多人会在开机期间执行 ifconfig 来设定回归设备 (loopback device) 时收到。这些讯息并无坏处,你可在 /etc/conf.modules 中加入以下数行来避免它们:</P><PRE><TT> alias net-pf-3 off # Forget AX.25 alias net-pf-4 off # Forget IPX alias net-pf-5 off # Forget AppleTalk</TT></PRE><P>当然,如果你把 IPX 编译了为模组,你不可加上和它有关的一行。<BR></P><H3>开始 Kerneld 後,启动 PPP 连线会使我的电脑慢如蜗牛</H3><P>已经有多个这类个案。这似乎是因为 kerneld 和部分系统用来设定和监察 PPP 连线的 <B>tkPPP script</B> 不正常地互相影向所致。因为那 script 在执行 ifconfig 时好像用到回圈 (loops)。这样会触发 kerneld 找寻 net-pf-X 模组(见前),增加系统工作量和可能导致系统纪录 (system log) 中出现大量 "Cannot locate module for net-pf-X" 讯息。除了不使用 tkPPP 或改用其他方法来监察连线,这问题未有其他解决方法。</P><H3>kerneld 不载入我的 SCSI 驱动程式!</H3><P>在你的 /etc/conf.modules 中加上一个 SCSI 配接器的项目。详情这看之前有关 <A HREF="#scsidevs">scsi_hostadapter</A> 的部分。</P><H3>modprobe 投诉 'gcc2_compiled' 未定义 (undefined)</H3><P>这是 module-utilities 的一个错误。它只在使用 binutils 2.6.0.9 或更新版本时出现,而且已在 binutils 的出版说明 (release note) 中说明。所以你应该看看它。你也可更新 module-utilities,如 modules-2.0.0 来解决这问题。</P><H3>我的音响驱动程式 (sound driver) 老是忘记音量之类设定</H3><P>模组载入後的设定是储存在模组之内的。所以,当 kerneld 自动卸下模组时,你所做的设定都会被忘掉,下次载入时又回复原状。</P><P>你可使 kerneld 在自动载入模组後执行一个程式,以作出设定。请参看<A HREF="#pre_post">以上</A>有关 'post-install' 项目的部分。</P><H3>DOSEMU 需要一些模组,我怎样使 kerneld 载入它们?</H3><P>你不能。不论是官方 (official) 或开发 (development) 版的 dosemu,都不支援用 kerneld 载入 dosemu 模组。不过,如果你有 2.0.26 或更新的核心,你不再需要那些 dosemu 模组 -- 你只需要更新 dosemu 至 0.66.1 版。(译按∶目前最新的 DOSEMU 稳定版本 (stable version) 是 0.66.7。)</P><H3>为何会有 "Ouch, kerneld timed out, message failed" 这讯息?</H3><P>当核心对 kerneld 作出要求时,它会期望在 1 秒之内得到应答 (acknowledgement)。如果 kerneld 不作出回应,这个讯息会被记录下来 (logged)。这要求会再被提出,直到完成为止。</P><P>这通常在系统负荷 (load) 非常高时发生。因为 kerneld 也是一个使用者行程 (user-process),它会如其他程序般排程 (scheduling)。负荷高时,它可能来不及在核心超时 (time out) 前作出回应。</P><P>如果这问题在负荷低时也发生,请再启动 kerneld (杀掉 kerneld 行程,以 <TT>/usr/sbin/kerneld</TT>指令来重新开始它)。如果仍有问题,你应该寄一份错误报告给<A HREF="mailto:linux-kernel@vger.rutgers.edu">linux-kernel@vger.rutgers.edu</A>,但在寄出前<B>请</B>先确保你的核心和 kerneld 都是最新的。</P><H3>mount 不等待 kerneld 载入档案系统模组</H3><P>已经收到一定数目有关 mount (8) 指令不等待 kerneld 载入档案系统模组的报告。 ismod 显示模组已被载入,如果你立刻再执行 mount 的话便会成功。这似乎是 module-utilities 1.3.69f 版中一个会影响 Debian 使用者的错误,使用一个新版的 module-utilities 可解决这问题。</P><H3>kerneld 不能载入 ncpfs 模组</H3><P>你编译 ncpfs utilities 时要用 -DHAVE_KERNELD。请参阅 ncpfs 的 Makefile。</P><H3>kerneld 不能载入 smbfs 模组</H3><P>你在使用一个旧的 smbmount utilities。请从 <A HREF="ftp://tsx-11.mit.edu/pub/linux/filesystems/smbfs/">ftp://tsx-11.mit.edu/pub/linux/filesystems/smbfs/</A> 下载最新版本 (0.10 或之後)。</P><H3>我把所有东西都编译成模组,现在我的系统不能启动</H3><H3>kerneld 不能载入根档案系统 (root filesystem) 模组。</H3><P>你不可把<B>所有东西</B>都编译成模组∶核心要有足够的驱动程式以使它能挂上 (mount) 根档案系统,和执行所有要用於启动 kerneld 的程式。所以你不能把以下东西模组化∶</P><UL><LI>根档案系统所在的硬碟的驱动程式</LI><LI>根档案系统的驱动程式</LI><LI>init, kerneld和其他程式的二元格式载入程式 (binary format loader)</LI></UL><P>[事实上,这并不正确。新的 1.3.x 及所有 2.0.x 核心都容许 LILO 或 LOADLIN 载入初始的 ram-disk,而你可以在启动的早期在这『磁碟』中载入模组。做法可在核心原程式码中的 Documentation/initrd.txt 档中可找到。] </P><H3>kerneld 不能在启动时载入 -- 投诉 libgdbm</H3><P>较新版的 kerneld 要 GNU dbm 程式库 libgdbm.so 才能执行。大多数的安装程式都会把这档案放在 /usr/lib,而你多数是在挂上 /usr 档案系统前执行了 kerneld。这问题的其中一个症状是 kerneld 在启动时不能籍 rc-scripts 载入,但如果你在启动系统後自己开始它,它便没有问题。解决方法,一是把 kerneld 的启动放在挂上 /usr 後,另一是把 gdbm 程式库放到你的根档案系统,如 /lib。</P><H3>我重新设定核心至没有 xxx 支援後出现 "Cannot load module xxx"</H3><P>Slackware(其他也可能)会在安装时籍执行 modprobe 来建立一个预设的 /etc/rc.d/rc.modules。modprode 得出来的结果会因原本的核心的设定而异。你可能在重新设定时排除了一些在 rc.modules 的模组,因此造成错误。你可把你在 rc.modules 中不用的模组变为注释 (comment out),或删除 rc.modules,让 kerneld 在需要模组时自行载入。</P><H3>我重新建立了核心及模组,但在启动时仍出现未分辨的符号 (unresolved symbol) 讯息</H3><P>你可能在设定或建立新核心时排除了一些模组,但已不用的旧模组仍在 /lib/modules 目录下。最简单的解决方法是删除你的 /lib/modules/x.y.z 目录及在核心的源程式码的目录下做一次 'make modules_install'。这问题只在重新设定同一版本的核心时发生。如果你在更新核心时遇到此问题,你有其他问题。</P><H3><A NAME="2-1-problems"></A>我安装了 Linux 2.1 後不能载入任何模组</H3><P>Linux 2.1 是目前的开发核心 (development kernel)。也就是说,它随时可能出现错误。其中一样大幅改变的是模组的处理方法,及核心和模组载入到什麽地方。Richard Henderson 现正负责核心的模组发展。</P><P>总结一句,如果你想在 2.1 版核心使用模组,你要∶</P><UL><LI>阅读 Documentation/Changes 档案及找出更新你的系统所需的模组</LI><LI>使用最新的 modutils,可从以下地方得到<A HREF="ftp://ftp.redhat.com/pub/alphabits/">ftp://ftp.redhat.com/pub/alphabits/</A>或在<A HREF="ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/">ftp://tsx-11.mit.edu/pub/linux/packages/alphabits/</A> 的映像站 (mirror site)</LI></UL><P>如果你想在 2.1 版核心使用模组的话,我会建议最少使用 2.1.29 版的核心。</P><BR><H3>自选拨号 (dial-on-demand) 网络又怎样?</H3><P>kerneld 对有需要时建立网络连线原本有些支援。尝试在没有连线时传送讯息包 (packet) 会使 kerneld 执行 <b>/sbin/request_route</b> 命令稿来建立 PPP 或 SLIP 连线。</P><P>这并不是一个好方法。Linux 网络发展人员 Alan Cox 在 Linux 核心的通信论坛 (Mailing List) 中批评∶<pre> 路径要求 (request-route) 的东西是过时、不对及无用的 [...],它已在 2.1.x 的源程式码中消失。</pre>我诚心建议你从 http://www.dna.lth.se/~erics/diald.html 取 Eric Schenk 的 <a href="http://www.dna.lth.se/~erics/diald.html">diald</a> 套装软件来安装,而不要使用路径要求及 kerneld。</P><P><HR></P><H2><A NAME="A9"></A>版权讯息</H2><P>This document is Copyright (c) Henrik Storner, 1996, 1997.</P><P>Unless otherwise stated, Linux HOWTO documents are copyrighted by theirrespective authors. Linux HOWTO documents may be reproduced and distributedin whole or in part, in any medium physical or electronic, as long as thiscopyright notice is retained on all copies. Commercial redistribution isallowed and encouraged; however, the author would like to be notified ofany such distributions. </P><P>All translations, derivative works, or aggregate works incorporatingany Linux HOWTO documents must be covered under this copyright notice.That is, you may not produce a derivative work from a HOWTO and imposeadditional restrictions on its distribution. Exceptions to these rulesmay be granted under certain conditions; please contact the Linux HOWTOcoordinator at the address given below. </P><P>In short, we wish to promote dissemination of this information throughas many channels as possible. However, we do wish to retain copyright onthe HOWTO documents, and would like to be notified of any plans to redistributethe HOWTOs. </P><P>If you have questions, please contact Tim Bynum, the Linux HOWTOcoordinator, at linux-howto@sunsite.unc.edu via email.</P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -