📄 ch-kernel-modules.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD><TITLE>内核模块</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+"><LINKREL="HOME"TITLE="Red Hat Linux 9"HREF="index.html"><LINKREL="UP"TITLE="系统配置"HREF="part-sysconfig.html"><LINKREL="PREVIOUS"TITLE="校验引导装载程序"HREF="s1-kernel-bootloader.html"><LINKREL="NEXT"TITLE="其它资料"HREF="s1-kernel-modules-additional-resources.html"><LINKREL="STYLESHEET"TYPE="text/css"HREF="rhdocs-man.css"><METAHTTP-EQUIV="Content-Type"CONTENT="text/html; charset=gb2312"></HEAD><BODYCLASS="CHAPTER"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">Red Hat Linux 9: Red Hat Linux 定制指南</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="s1-kernel-bootloader.html"ACCESSKEY="P">后退</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom"></TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="s1-kernel-modules-additional-resources.html"ACCESSKEY="N">前进</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="CHAPTER"><H1><ANAME="CH-KERNEL-MODULES"></A>31. 内核模块</H1><P> Linux 内核具有模块化设计。在引导时,只有少量的驻留内核被载入内存。这之后,无论何时用户要求使用驻留内核中没有的功能,某<ICLASS="FIRSTTERM">内核模块(kernel module)</I>,有时又称<ICLASS="FIRSTTERM">驱动程序(driver)</I>。就会被动态地载入内存。 </P><P> 在安装过程中,系统上的硬件会被探测。基于探测结果和用户提供的信息,安装程序会决定哪些模块需要在引导时被载入。安装程序会设置动态载入机制来透明地运行。 </P><P> 如果安装后添加了新硬件,而这个硬件需要一个内核模块,系统必须被配置来为新硬件载入正确的内核模块。当系统使用新硬件引导后,<BCLASS="APPLICATION">Kudzu</B> 程序会运行,如果新硬件被支持,它就会被检测到,该程序还会为它配置模块。你也可以通过编辑模块配置文件 <TTCLASS="FILENAME">/etc/modules.conf</TT> 来手工指定这个模块。 </P><DIVCLASS="NOTE"><P></P><TABLECLASS="NOTE"WIDTH="100%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./stylesheet-images/note.png"HSPACE="5"ALT="注记"></TD><THALIGN="LEFT"VALIGN="CENTER"><B>注记</B></TH></TR><TR><TD> </TD><TDALIGN="LEFT"VALIGN="TOP"><P> 用来显示 X 窗口系统界面的视频卡模块是 <TTCLASS="FILENAME">XFree86</TT> 软件包的一部分,而不是内核的一部分;因此,本章并不应用于该模块。 </P></TD></TR></TABLE></DIV><P> 例如,如果某系统包括了一个 SMC EtherPower 10 PCI 网卡,模块配置文件包含以下行: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMPUTEROUTPUT">alias eth0 tulip</TT></PRE></TD></TR></TABLE><P> 如果系统上添加了第二个网卡,它和第一个网卡一模一样,在 <TTCLASS="FILENAME">/etc/modules.conf</TT> 中添加这一行: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMPUTEROUTPUT">alias eth1 tulip</TT></PRE></TD></TR></TABLE><P> 要获得内核模块的字母顺序列表以及这些模块所支持的硬件,请参阅<ICLASS="CITETITLE">《Red Hat Linux 参考指南》</I>。 </P><DIVCLASS="SECT1"><H1CLASS="SECT1"><ANAME="S1-KERNEL-MODULE-UTILS"></A>31.1. 内核模块工具</H1><P> 如果安装了 <TTCLASS="FILENAME">modutils</TT> 软件包,你还可以使用一组管理内核模块的命令。使用这些命令来判定模块是否被成功地载入了,或为一件新硬件试验不同的模块。 </P><P> <TTCLASS="COMMAND">/sbin/lsmod</TT> 命令显示了当前载入了的模块列表。例如: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMPUTEROUTPUT">Module Size Used by Not taintediptable_filter 2412 0 (autoclean) (unused)ip_tables 15864 1 [iptable_filter]nfs 84632 1 (autoclean)lockd 59536 1 (autoclean) [nfs]sunrpc 87452 1 (autoclean) [nfs lockd]soundcore 7044 0 (autoclean)ide-cd 35836 0 (autoclean)cdrom 34144 0 (autoclean) [ide-cd]parport_pc 19204 1 (autoclean)lp 9188 0 (autoclean)parport 39072 1 (autoclean) [parport_pc lp]autofs 13692 0 (autoclean) (unused)e100 62148 1microcode 5184 0 (autoclean)keybdev 2976 0 (unused)mousedev 5656 1hid 22308 0 (unused)input 6208 0 [keybdev mousedev hid]usb-uhci 27468 0 (unused)usbcore 82752 1 [hid usb-uhci]ext3 91464 2jbd 56336 2 [ext3]</TT></PRE></TD></TR></TABLE><P> 对每行而言,第一列是模块名称;第二列是模块大小;第三列是用量计数。 </P><P> 用量计数后面的信息对每个模块而言都有所不同。如果 <TTCLASS="COMPUTEROUTPUT">(unused)</TT> 被列在某模块的那行中,该模块当前就没在使用。如果 <TTCLASS="COMPUTEROUTPUT">(autoclean)</TT> 被列在某模块的那行中,该模块可以被 <TTCLASS="COMMAND">rmmod -a</TT> 命令自动清洗。当这个命令被执行后,所有自从上次被自动清洗后未被使用的被标记了“autoclean”的模块都会被卸载。Red Hat Linux 不默认执行自动清洗行动。 </P><P> 如果模块名称被列举在行尾的括号内,括号内的模块就依赖于列举在这一行的第一列中的模块。例如,在以下行中: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMPUTEROUTPUT">usbcore 82752 1 [hid usb-uhci]</TT></PRE></TD></TR></TABLE><P> hid 和 usb-uhci 内核模块依赖于 usbcore 模块。 </P><P> <TTCLASS="COMMAND">/sbin/lsmod</TT> 输出和查看 <TTCLASS="FILENAME">/proc/modules</TT> 的输出相同。 </P><P> 要载入内核模块,使用 <TTCLASS="COMMAND">/sbin/modprobe</TT> 命令,然后跟着内核模块的名称。按照默认设置,<TTCLASS="COMMAND">modprobe</TT> 试图从 <TTCLASS="FILENAME">/lib/modules/<TTCLASS="REPLACEABLE"><I><kernel-version></I></TT>/kernel/drivers/</TT> 子目录中载入模块。每类模块都有一个子目录,如用于网络接口驱动程序的 <TTCLASS="FILENAME">net/</TT> 子目录。某些内核模块有模块依赖关系,这意味着你必须首先载入其它模块才能载入这些模块。 <TTCLASS="COMMAND">/sbin/modprobe</TT> 命令检查这些依赖关系,并在载入指定模块前载入满足这些依赖关系的模块。 </P><P> 例如: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">/sbin/modprobe hid</TT></PRE></TD></TR></TABLE><P> 这个命令载入任何满足依赖关系的模块,然后再载入 <TTCLASS="FILENAME">hid</TT> 模块。 </P><P> 要在 <TTCLASS="COMMAND">/sbin/modprobe</TT> 执行命令的时候把它们都显示在屏幕上,使用 <TTCLASS="OPTION">-v</TT> 选项。例如: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">/sbin/modprobe -v hid</TT></PRE></TD></TR></TABLE><P> 所显示的输出和下面相似: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">/sbin/insmod /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.oUsing /lib/modules/2.4.20-2.47.1/kernel/drivers/usb/hid.oSymbol version prefix 'smp_'</TT></PRE></TD></TR></TABLE><P> 你还可以使用 <TTCLASS="COMMAND">/sbin/insmod</TT> 命令来载入内核模块;不过它不解决依赖关系。因此,推荐你使用 <TTCLASS="COMMAND">/sbin/modprobe</TT> 命令。 </P><P> 要卸载内核模块,使用 <TTCLASS="COMMAND">/sbin/rmmod</TT> 命令和模块名称。<TTCLASS="COMMAND">rmmod</TT> 工具只卸载不在使用的、和不是被正使用的模块所依赖的模块。 </P><P> 例如: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">/sbin/rmmod hid</TT></PRE></TD></TR></TABLE><P> 这个命令卸载 <TTCLASS="FILENAME">hid</TT> 内核模块。 </P><P> 另一个有用的模块工具是 <TTCLASS="COMMAND">modinfo</TT>。使用 <TTCLASS="COMMAND">/sbin/modinfo</TT> 命令来显示关于内核模块的信息。一般语法是: </P><TABLECLASS="SCREEN"BGCOLOR="#DCDCDC"WIDTH="100%"><TR><TD><PRECLASS="SCREEN"><TTCLASS="COMMAND">/sbin/modinfo <TTCLASS="REPLACEABLE"><I>[options]</I></TT> <TTCLASS="REPLACEABLE"><I><module></I></TT></TT></PRE></TD></TR></TABLE><P> 包括 <TTCLASS="COMMAND">-d</TT> 在内的选项显示了关于模块的简短描述,<TTCLASS="COMMAND">-p</TT> 选项列举了模块所支持的参数。要获取选项的完整列表,请参阅 <TTCLASS="COMMAND">modinfo</TT> 的说明书页(<TTCLASS="COMMAND">man modinfo</TT>)。 </P></DIV></DIV><DIVCLASS="NAVFOOTER"><HRALIGN="LEFT"WIDTH="100%"><TABLESUMMARY="Footer navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top"><AHREF="s1-kernel-bootloader.html"ACCESSKEY="P">后退</A></TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="index.html"ACCESSKEY="H">起点</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top"><AHREF="s1-kernel-modules-additional-resources.html"ACCESSKEY="N">前进</A></TD></TR><TR><TDWIDTH="33%"ALIGN="left"VALIGN="top">校验引导装载程序</TD><TDWIDTH="34%"ALIGN="center"VALIGN="top"><AHREF="part-sysconfig.html"ACCESSKEY="U">上级</A></TD><TDWIDTH="33%"ALIGN="right"VALIGN="top">其它资料</TD></TR></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -