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

📄 kerneld.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
📖 第 1 页 / 共 3 页
字号:
<PRE><TT>  osiris:~ $ /sbin/lsmod   Module:        #pages:  Used by:  floppy            11    0 (autoclean)</TT></PRE><P>&quot;(autoclean)&quot; 代表如果有一分钟没用此模组,它就会被 kerneld 自动移走。所以,那 11 页记忆体(44 kB,一页等於 4kB)只会在我使用软碟机时被占用。如果我一分钟不用软碟,它会被释放。如果你的记忆体不敷应用,这就太棒了!</P><P><HR></P><H2><A NAME="Configuration"></A>kerneld 如何知道该载入什麽模组?</H2><P>虽然 kerneld 本身对常用的模组有所认识,有时它会不知如何应付核心提出的要求。例如光碟机驱动程式或网络驱动程式等可能需要超过一个模组的情形。 </P><P>kerneld 从核心部分会收到以下种类的要求:</P><UL><LI><A HREF="#blockdev">区块设备驱动程式 (a block-device driver)</A> </LI><LI><A HREF="#chardev">字元设备驱动程式 (a character-device driver)</A> </LI><LI><A HREF="#binfmt">二元格式 (a binary format)</A> </LI><LI><A HREF="#ldisc">tty 连线规则 (a tty line discipline)</A> </LI><LI><A HREF="#fs">档案系统 (a filesystem)</A> </LI><LI><A HREF="#eth0">网络设备 (a network device)</A> </LI><LI>网络服务 (a network service),如 rarp</LI><LI><A HREF="#net-pf">网络协定 (a network protocol)</A>,如 IPX </LI></UL><P>kerneld 从架构档案 (configuration file) <B>/etc/conf.modules</B> 中得知有什麽模组需要载入。这里有两类项目:路径 (paths)(模组档案的位置)和代号 (aliases)(要载入什麽模组)。如果你未有此档,你可用以下方法自己制造: </P><PRE><TT>  /sbin/modprobe -c | grep -v '^path' &gt;/etc/conf.modules</TT></PRE><P>如果你想加多一个路径到预定路径中,你<U>必须包括所有现有的路径</U>。因为在 /etc/conf.modules 里的一个路径项目会<U>取代 </U>所有 modprobe 内置的路径!</P><P>通常你是不用自己加上路径的,因为预设的路行将己照顾到所有正常的设定。我可保证!</P><P>另一方面,如果你只想加入代号 (alias) 或者选项 (option directive),你在 /etc/conf.modules 的新项目会加入到 modprobe 所知的。如果你想再定义一个代号或选择,你在 /etc/conf.modules 中的项目会凌驾预设那个。</P><H3><A NAME="blockdev"></A>区块设备</H3><P>如果你执行 '/sbin/modprobe -c',你会得到一个 kerneld 已知的模组的名单及它们所对应的要求。例如,导致载入软碟驱动程式的要求是主号码 (major number)是 2 的区块设备。 </P><PRE><TT>  osiris:~ $ /sbin/modprobe -c | grep floppy  alias block-major-2 floppy</TT></PRE><P>为什麽是 block-major-2?因为软碟设备 /dev/fd* 的主号码 (major number) 是 2 ,又是区块设备。</P><PRE><TT>  osiris:~ $ ls -l /dev/fd0 /dev/fd1  brw-rw-rw-   1 root     root       2,   0 Mar  3  1995 /dev/fd0  brw-r--r--   1 root     root       2,   1 Mar  3  1995 /dev/fd1</TT></PRE><H3><A NAME="chardev"></A>字元设备</H3><P>字元设备的方法处理也差不多。例如 ftape floppy tape driver 的是 major-device 27:</P><PRE><TT>  osiris:~ $ ls -lL /dev/ftape   crw-rw----   1 root     disk      27,   0 Jul 18  1994 /dev/ftape</TT></PRE><P>但 kerneld 本身并不知道 ftape 驱动程式,它不会在 '/sbin/modprobe -c' 的结果中出现。</P><P>所以,要使 kerneld 载入 ftape 驱动程式,我要加一行到 kerneld 的设定档 /etc/conf.modules 中:</P><PRE><TT>  alias char-major-27 ftape</TT></PRE><H3><A NAME="eth0"></A>网络设备</H3><P>你也可以用设备的名称来代替那些 'char-major-xxx' 或 'block-major-yyy' 设定。这样对网络设备尤其有用,例如把 ne2000 网络卡用作 eth0 可以籍此载入:</P><PRE><TT>  alias eth0 ne</TT></PRE><P>如果你需要传递一些选项给你的驱动程式,例如告诉模组这网络卡使用什麽 IRQ,你可加上如下一 'options' 行:</P><PRE><TT>  options ne irq=5</TT></PRE><P>这样会使 kerneld 用以下指令来载入 NE2000 驱动程式∶</P><PRE><TT>  /sbin/modprobe ne irq=5</TT></PRE><P>当然,实际上所用的选项会因应所用模组而有所不同。</P><H3><A NAME="binfmt"></A>二元格式</H3><P>二元格式也以相似的方法处理。每当你尝试执行一个核心不懂载入的程式,kerneld 便会收到一个 &quot;binfmt-xxx&quot; 的要求, xxx 是一个由档案开头数个字元决定的数字。使 kerneld 为 ZMAGIC (a.out) 执行档载入 binfmt_aout 模组的设定是:</P><PRE><TT>  alias binfmt-267 binfmt_aout</TT></PRE><P>因为 ZMAGIC 档的幻数 (magic number) 是 267。(如果你查看 /etc/magic,你会见到 0413 这个数字,但 /etc/magic 使用八进位数 (octal numbers) 而 kerneld 使用十进数 (decimal),而八进位的 413 即十进数的 267。)由於 a.out 格式共有三款稍为稍为不同的可执行档 (NMAGIC, QMAGIC and ZMAGIC),要全面支援 binfmt_aout 模组我们需要</P><PRE><TT>  alias binfmt-264 binfmt_aout  # pure executable (NMAGIC)  alias binfmt-267 binfmt_aout  # demand-paged executable (ZMAGIC)  alias binfmt-204 binfmt_aout  # demand-paged executable (QMAGIC)</TT></PRE><P>kerneld 可自动辨认 a.out, Java 和 iBCS 二元格式,毋须特别设定。</P><H3><A NAME="ldisc"></A>连线规则 (slip, cslip and ppp)</H3><P>连线规则用 &quot;tty-ldisc-x&quot;来作要求,而 x 一般是 1 (slip) 或 3 (ppp)。kerneld 本身都认识这两样。</P><P>说起 ppp,如果你想 kerneld 载入 bsd_comp 资料压缩模组,你需要加两行到 /etc/conf.modules 中:</P><PRE><TT>  alias tty-ldisc-3 bsd_comp  alias ppp0 bsd_comp</TT></PRE><H3><A NAME="net-pf"></A>网络协定 (IPX, AppleTalk, AX.25)</H3><P>部分网络协定也可以模组载入。核心要用到一个网络家族 (network family)(如 IPX)时,会向 kerneld 作出对一个类似 &quot;net-pf-X&quot; 的要求,而 X 是一个代表所属家族的数字。例如 net-pf-3 是 AX.25,net-pf-4 是 IPX,而 net-pf-5 是 AppleTalk。(这些数字是由 linux 源程式档 include/linux/socket.h 中 AF_AX25, AF_IPX 的定义而来的。)故此要自动载入 IPX 模组,你要加一个类似以下的项目到 /etc/conf.modules 中:</P><PRE><TT>  alias net-pf-4 ipx</TT></PRE><P>也请阅读以下有关防止开机时出现关於未定义的协定的<A HREF="#CommonProblems">常见问题</A>。</P><H3><A NAME="fs"></A>档案系统</H3><P>有关档案系统的 kerneld 要求就是档案系统的名称。一个常见的用途是为光碟载入 isofs 的模组,例如 &quot;iso9660&quot; 档案系统:</P><PRE><TT>  alias iso9660 isofs</TT></PRE><P><HR></P><H2><A NAME="special-devs"></A>需要特别设定的设备</H2><P>部分设备不只要使用代码 (aliasing),还要其他设定,如模组的设备 (a device to a module)。 </P><UL><LI>主数码 10 的字元设备:<A HREF="#miscdevs">杂项设备 (The miscellaneous devices)</A> </LI><LI><A HREF="#scsidevs">SCSI 设备</A> </LI><LI><A HREF="#pre_post">需特别初始化 (initialization) 的设备</A></LI></UL><P><BR></P><H3><A NAME="miscdevs"></A>char-major-10:滑鼠、看门狗和随机数 (Mice, watchdogs and randomness)</H3><P>大多数硬件设备都以主数码分辨,例如 ftape 是 char-major-27。但如果你看看在 /dev 中主数码是 10 的字元设备,你会见到一堆毫无关连的设备,包括:</P><UL><LI>各种各样的滑鼠(bus mice, PS/2 mice)</LI><LI>看门狗设备 (watchdog devices) </LI><LI>核心的 'random' 设备</LI><LI>APM 介面 (Advanced Power Management interface) </LI></UL><P>很明显,这些设备是由多个不同的模组控制的。所以,这些<B>杂项设备</B>的 kerneld 设定用到主号码<b>及</b>副号码 (the major number and the minor number):</P><PRE><TT>        alias char-major-10-1 psaux     # For PS/2 mouse        alias char-major-10-130 wdt     # For WDT watchdog</TT></PRE><P>要用到此特性,你需要一个 1.3.82 或之後的核心部分。较旧的核心不会把副号码传给 kerneld,因此,kerneld 不能找出所需要的杂项设备。<BR></P><H3><A NAME="scsidevs"></A>载入 SCSI 驱动程式: scsi_hostadapter 项目</H3><P>SCSI 设备包括一个 SCSI 配接卡 (SCSI host adapter, 例如 Adaptec 1542)及一个所需设备(如硬碟机 (hard disk)、光碟机 (CD-ROM) 或磁带机 (tape-drive))的驱动程式。这全都可以模组来载入。但是,当你想存取连接到 Adaptec 卡的光碟机时,核心和 kerneld 只知道它需要载入 sr_mod 模组来支援那 SCSI 光碟机—它不知道那光碟机连接到什麽 SCSI 控制器 (SCSI controller),所以不知道载入什麽模组来支援那光碟机。</P><P>要解决这问题,你可加一个你的 SCSI 驱动程式的项目到你的 /etc/conf.modules 中,籍以告诉 kerneld 如何在众多 SCSI 控制器模组中选择:</P><PRE><TT>        alias scd0 sr_mod               # sr_mod for SCSI CD-ROM's ...        alias scsi_hostadapter aha1542  # ... need the Adaptec driver</TT></PRE><P>这只适用於 1.3.82 或之後的核心。</P><P>这方法只当你只用一个 SCSI 控制器时适用。如果你有超过一个,难度就高一点。</P><P>一般来说,如果已经载入了一个配接器,你不能再叫 kerneld 载入另一个。你可把两个都编译到核心中(不用模组),或自己把模组载入。</P><P>事实上,<i>有</i>一个方法可使 kerneld 载入多个 SCSI 驱动程式。James Tsiao 有以下提议:</P><pre><i>  只要你亲手建立 modules.dep 的倚赖 (dependency),你可很轻易使  得 kerneld 载入第二个 SCSI 驱动程式。你只需一个类似的项目:       /lib/modules/2.0.30/scsi/st.o: /lib/modules/2.0.30/scsi/aha1542.o       来使 kerneld 在载入 st.o 前先载入 aha1542.o。我家中的电脑就使用  了几乎相同的设定,对我所有二级 SCSI 设备 (secondary scsi devices),  包括磁带机、光碟机和其他一般的 SCSI 设备都没问题。缺点是  'depmod -a' 不能自动查出这些倚赖,所以你要自己加入这些,而且不  可在开机时执行 'depmod -a'。但只要设定好了,kerneld 就能自动载入  aha1542.o。</i></pre><p>你要知道这技考只当你有不同种类的 SCSI 设备接驳在两个控制器时才有用,例如,把硬碟驳在其中一个,而把光碟机、磁带或其他 SCSI 驳到另一个。</p><br>

⌨️ 快捷键说明

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