📄 kerneld.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"><HTML><HEAD> <TITLE>Linux kerneld mini-HOWTO</TITLE> <META NAME="GENERATOR" CONTENT="Mozilla/3.01Gold (X11; I; Linux 2.1.31 i486) [Netscape]"> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"></HEAD><BODY><H1>kerneld mini-HOWTO</H1><P>1.7 版,上次由 Henrik Storner <A HREF="mailto:storner@osiris.ping.dk">(storner@osiris.ping.dk)</A>於 1997 年 7 月 19 日(storner@osiris.ping.dk) 更新。</P><P> 曾达康 <A HREF="mailto:a9504480@graduate.hku.hk">(a9504480@graduate.hku.hk)</a> 於 1998 年 6 月 14 日完成翻译。<HR></P><H2>导言</H2><P>此文件解释如何使用 Linux 核心中的 kerneld 功能。它会说明:</P><UL><LI><A HREF="#Introduction">kerneld 是什麽</A> </LI><LI><A HREF="#Why">为什麽要用它</A> </LI><LI><A HREF="#Where">如何取得所需东西</A> </LI><LI><A HREF="#Setup">如何设定它</A></LI><LI><A HREF="#Configuration">如何告诉 kerneld 它不认识的模组的资料</A> </LI><LI><A HREF="#Spying">如何侦察 kerneld (设定时可能有用)</A></LI><LI><A HREF="#Goodies">kerneld 的特别用途</A> </LI><LI><A HREF="#CommonProblems">常见问题及怪事</A> </LI></UL><P>此文件的最新版本可在 <A HREF="kerneld-mini-HOWTO.html">http://eolicom.olicom.dk/~storner/kerneld-mini-HOWTO.html</A> 找到。(译按:中文版则可在 <A HREF="http://www.linux.org.tw/CLDP/mini/Kerneld.html">http://www.linux.org.tw/CLDP/mini/Kerneld.html</a> 找到)在此 mini-HOWTO 推出的正式版本期间,你可在 <A HREF="kern.html">http://eolicom.olicom.dk/~storner/kern.html</A> 找到未经组织的更新清单。</P><H2>荣誉</H2><P>如果你发现此文件中出现错误,请告诉文章的原作者。以下各人都曾对本文作出贡献:</P><UL><LI>Bjorn Ekwall <bj0rn@blox.se></LI><LI>Ben Galliart <bgallia@luc.edu></LI><LI>Cedric Tefft <cedric@earthling.net></LI><LI>Brian Miller <bmiller@netspace.net.au></LI><LI>James C. Tsiao <jtsiao@madoka.jpl.nasa.gov></LI></UL><P>我非常感谢此 mini-HOWTO 读者寄给我们的鼓励和提议。</P><P>(译按∶当然,如果问题出在译文中,请通知曾达康 <a9504480@graduate.hku.hk>)</P><P><HR></P><H2><A NAME="Introduction"></A>kerneld 是什麽?</H2><P>kerneld 是由 <A HREF="mailto:bj0rn@blox.se">Bjorn Ekwall</A> 引入 1.3 版的发展核心 (development kernel) 的功能。它可在所有 2.0 及 2.1 版本的核心找到。它令模组 (modules)—即驱动程式 (device drivers)、网络驱动器 (network drivers)、档案系统 (filesystems)—自动在有需要时载入,而不需自行使用 modprobe 或 insmod。</P><P>还有更有趣的东西,虽然它们尚未整合到标准的核心中∶</P><UL><LI>它可设定成不使用内定的空白画面,而让你选择其他程式,使你可自选萤幕保护器 (screen saver)。</LI><LI>和萤幕保护器相似,你可把主控台 (console) 的‘哔’声改为完全不同的东西…</LI></UL><P>kerneld 包括两个独立部分:</P><UL><LI>核心向监控程式 (daemon) 就所需模组提出要求的支援。</LI><LI>懂找出所需模组来满足核心要求的使用者层面 (user-level) 监控程式。</LI></UL><P>要使用 kerneld,两个部分都要正常运作。只设定好其中一个是没用的。</P><P><HR></P><H2><A NAME="Why"></A>为什麽要用它?</H2><P>有不少好理由去使用 kerneld。这里提出的是我个人的——其他人可能有其他的理由。</P><UL><LI>如果你要为多个只有少许不同的系统(如使用不同的网络控制卡)建立核心,你只需建立一个核心和数个模组,而不需为每个系统建立不同的核心。</LI><LI>对开发人员而言,模组比较容易测试—你不需重新启动电脑以载入及卸下驱动程式(这点适用於所有模组,并不限於 kerneld 载入的)。</LI><LI>它减少核心占用的记忆体,即你有更多记忆体供其他程式使用。核心所占用的记忆体是 *永不* 被换出 (swap-out) 的,所以如果你的核心中有 100kB 没用的驱动程式的话,那只是在浪费你的记忆体。</LI><LI>有一些我要用的东西,如 ftape floppy-tape driver 或 iBCS,只以模组形式出现。但我懒得自己载入和卸下它们。</LI><LI>Linux 发行者不再需要建立 284 个不同的开机影象 (boot images) —使用者只载入配合其硬件的驱动程式。例如 RedHat 4.0 就使用了这方法。</LI></UL><P>当然,你也有不使用它的理由—你可能喜欢在一个核心映象 (kernel image) 中包括所有你要的驱动程式。如果是这样,你看错文章了。</P><P><HR></P><H2><A NAME="Where"></A>如何取得所需东西?</H2><P>对 kerneld 的支援始於 1.3.57 版。如果你正使用较旧的版本,你需要更新它才可用 kerneld 了。所有主要的 Linux ftp 台都有核心的原程式码。我建议你更新至最新版本的稳定核心,2.0,目前是嵌补等级 (patch level) 2.0.29 (译按:现时已是 2.0.35):</P><PRE> <A HREF="ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0">ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0</A>/linux-2.0.29.tar.gz <A HREF="ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0">ftp://tsx-11.mit.edu/pub/linux/sources/system/v2.0</A>/linux-2.0.29.tar.gz <A HREF="ftp://ftp.funet.fi/pub/OS/Linux/PEOPLE/Linus/v2.0">ftp://ftp.funet.fi/pub/Linux/PEOPLE/Linus/v2.0</A>/linux-2.0.29.tar.gz</PRE><P>使用者层面的监控程式包含在 modules-1.2.8 及更新的 modules-2.0 中。它们一般会和核心源程式码在同一地点找到,而官方位置包括:</P><PRE> <A HREF="ftp://sunsite.unc.edu/pub/Linux/kernel/modules-2.0.0.tar.gz">ftp://sunsite.unc.edu/pub/Linux/kernel/v2.0/modules-2.0.0.tar.gz</A> <A HREF="ftp://tsx-11.mit.edu/pub/linux/sources/sbin/">ftp://tsx-11.mit.edu/pub/linux/sources/sbin/modules-2.0.0.tar.gz</A> <A HREF="ftp://ftp.funet.fi/pub/OS/Linux/tools/">ftp://ftp.funet.fi/pub/Linux/tools/modules-2.0.0.tar.gz</A></PRE><P>注意:如果你想在 2.1 版的<B>开发</B>核心尝试载入模组,你必须用最新的 modutils-(不是 modules-)。但请看 <A HREF="#2-1-problems">以下</A>有关模组和 2.1 版核心部分的问题。</P><P><HR></P><H2><A NAME="Setup"></A>如何设定它?</H2><P>首先要取得所需的东西:合用的核心部分及最新版的 modules-utilities。之後你要安装 modules-utilities。十分简单:只需把原程式码解压及执行 <B>make install</B>. 这样便会编译 genksysm, insmod, lsmod, modprobe, depmod, kerneld,及把它们安装到 /sbin。我建议你加数行到你的开机命令手稿 (startup-script) 来完成启动时所需的设定。如果你使用 Slackware,请把以下数行加入你的 /etc/rc.d/rc.S 档,如果你使用 SysVinit,如 Debian, RedHat, Caldera,请把以下数行加入你的 /etc/rc.d/rc.sysinit 档。(译按:据我所知,RedHat 5.0的 SysVinit已加入此功能):</P><PRE><TT> # Start kerneld - this should happen very early in the # boot process, certainly BEFORE you run fsck on filesystems # that might need to have disk drivers autoloaded if [ -x /sbin/kerneld ] then /sbin/kerneld fi # Your standard fsck commands go here # And you mount command to mount the root fs read-write # Update kernel-module dependencies file # Your root-fs MUST be mounted read-write by now if [ -x /sbin/depmod ] then /sbin/depmod -a fi</TT></PRE><P>第一部分启动 kerneld。</P><P>第二部分开始时执行 'depmod -a'。depmod 建立所有可找到的模组的清单及分析它们之间互相依赖的情况。所以,它会知道载入一个模组前是否需要先载入其他模组。</P><P><B>注意</B>∶最新版本的 kerneld 可选择链结 (link) GNU 的 dbm 程式库 libgdbm。如果在编译 module-utilities 时作了此抉择,<I>找不到 libgdbm 时 kerneld 便不能启动。</I>这很有可能当 /usr 在另一个磁碟分区 (partition),而企图在挂 (mount) /usr 前启动 kerneld 时发生。建议的解决方法是把 libgdbm 从 /usr/lib 移到 /lib,或静态连结 kerneld (link kerneld statically)。</P><P> 之後,你要把核心的源程式解压,设定及建立一个你喜欢的核心。如果你未试过这样做,你必须阅读在 Linux 源程式码顶层目录 (top directory) 中的 README 档。在执行 <B>make config</B> 设定核心时,你要注意数条在早期出现的问题:</P><PRE><TT> Enable loadable module support (CONFIG_MODULES) [Y/n/?] Y</TT></PRE><P>你要选择 loadable module support,否则根本不会有模组让 kerneld 载入。答 Yes。 </P><PRE><TT> Kernel daemon support (CONFIG_KERNELD) [Y/n/?] Y</TT></PRE><P> 当然,这也是需要的,很多东西都可建立为模组。你会见到类似的问题:</P><PRE><TT> Normal floppy disk support (CONFIG_BLK_DEV_FD) [M/n/y/?] </TT></PRE><P>你可回答 'M' 来代表模组。通常只有开机时必须的驱动程式,如硬碟机驱动程式,和根目录的档案系统等必需建立在核心中。其他皆可建立为模组。 </P><P>完成 'make config' 後,执行 'make dep', 'make clean', 'make zImage' 或 'make zlilo', 'make modules' 和 'make modules_install'。</P><P>成功!</P><P>'make zImage' 会把你的新核心映像 (kernel image) 放到 arch/i386/boot/zImage。你要把它拷贝到你放置启动映像的地方或用 LILO 安装它。</P><P>想得到更多有关设定,建立及安装核心部分的资料,请阅读定时贴上 comp.os.linux.answers 的<A HREF="http://sunsite.unc.edu/mdw/HOWTO/Kernel-HOWTO.html">Kernel-HOWTO</A>,你也可在 sunsite.unc.edu 的 /pub/Linux/docs/HOWTO 找到它。(译按:中文版可在 <A HREF="http://www.linux.org.tw/CLDP/Kernel-HOWTO.html">http://www.linux.org.tw/CLDP/Kernel-HOWTO.html</a>找到。)</P><P><HR></P><H2><A NAME="Testing"></A>试用 kerneld</H2><P>现在你可用新的核心部分开机。在系统启动後,执行 'ps -ax',你应该会见到kerneld 的一行:</P><PRE><TT> PID TTY STAT TIME COMMAND 59 ? S 0:01 /sbin/kerneld</TT></PRE><P>kerneld 其中一个好处是只要你有所需的核心及安装好监控程式,你只需作很少设定。现在,你可尝试用一个建立成模组的驱动程式—它多数会不需再作设定而能使用。我把软磁碟的驱动程式建立成模组,所以我放入一只 DOS 磁碟及</P><PRE><TT> osiris:~ $ mdir a: Volume in drive A has no label Volume Serial Number is 2E2B-1102 Directory for A:/ binuti~1 gz 1942 02-14-1996 11:35a binutils-2.6.0.6-2.6.0.7.diff.gz libc-5~1 gz 24747 02-14-1996 11:35a libc-5.3.4-5.3.5.diff.gz 2 file(s) 26689 bytes</TT></PRE><P>即是说软磁碟的驱动程式运作正常—当我尝试使用软磁碟时,它被自动载入。</P><P>要看到软磁碟的模组真的被载入,你可执行 /sbin/lsmod,它会列出现时载入了的模组。</P>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -