第1节 内核的组成

 


1.1 内核镜象文件

 

      内核通常会以镜象文件(Image File)的类型存储在Linux系统中。当你启动装有Linux系统的计算机时,启动加载器(Boot Loader)程序会将内核镜象文件直接加载到内存,以启动内核与整个操作系统。

 

      [flagonxia@dreamworks boot]$ pwd

      /boot

      [flagonxia@dreamworks boot]$ ls -l vmlinuz-2.6.9-55.0.2.EL
       -rw-r--r--  1 root root 1511833 Jun 27  2007 vmlinuz-2.6.9-55.0.2.EL

 

      通常,内核镜象文件保存在/boot/下面。

 

1.2 内核模块 (kernel Modul)

  

     那些没有编译到内核镜象文件中的功能都被单独编译成内核模块,存放在/lib/modules/KERNEL_VERSION/目录下。

 

[flagonxia@dreamworks 2.6.9-55.0.2.EL]$ pwd
/lib/modules/2.6.9-55.0.2.EL
[flagonxia@dreamworks 2.6.9-55.0.2.EL]$ ls -l
total 692
drwxr-xr-x  9 root root   4096 Aug 30  2007 kernel-rw-r--r--  1 root root 125273 Aug 30  2007 modules.alias
-rw-r--r--  1 root root     69 Aug 30  2007 modules.ccwmap
-rw-r--r--  1 root root 137583 Aug 30  2007 modules.dep
-rw-r--r--  1 root root     73 Aug 30  2007 modules.ieee1394map
-rw-r--r--  1 root root    357 Aug 30  2007 modules.inputmap
-rw-r--r--  1 root root    235 Aug 30  2007 modules.isapnpmap
-rw-r--r--  1 root root 123586 Aug 30  2007 modules.pcimap
-rw-r--r--  1 root root  69929 Aug 30  2007 modules.symbols
-rw-r--r--  1 root root 158926 Aug 30  2007 modules.usbmap

 

      其中的子目录kernel是内存模块真正存储的地方。

 

1.3 initrd镜像文件 (Initial RAM Disk, Initrd)

 

 

      R.H. 系统允许把部分的内核模块做成初始化内存磁盘(Initrd)镜像文件。启动内核时,再把initrd镜像文件加载到内存,内核便可以从initrd镜像文件加载外置设备的模块,再去驱动这些外置设备。

    

  

 

第2节 管理内核模块初探

 

 

2.1 查看某个模块的信息

 

modinfo [-a:d:l:f:n:p -F FIELD, --field FIELD] MODULES

 

-a:只显示模块作者的信息

-d:只显示模块的说明文字

-l:只显示模块的版权宣告

-f:只显示模块的文件名

-n:只显示模块的名称信息

-p:只显示模块的参数

-F FIELD, --field FIELD:指定要查看模块的FIELD信息

 

例子:

#modinfo -F filename softdog

 

2.2 查看已加载的模块

 

lsmod

 

2.3 手动加载模块

 

insmod MODULE_FILE [PARAMETER=VALUE...]

 

MODULE_FILE: 要加载的模块的文件名,必须是绝对路径

 

PARAMETER=VALUE:加载模块时的参数

 

例子:

# insmod /lib/modules/$(uname -r)/kernel/drivers/char/watchdog/softdog.ko

 

2.4 手动卸载模块

 

rmmod [-s, --syslog] MODULE...

 

-s:将卸载模块的信息记录到系统日志服务器。

 

3 模块的依存性



3.1 模块依存性的体现

                                              

编译rpm内核镜像 linux内核镜像文件_linux

 

                                                     图1 模块依存性的图例

 

      如上图所示,模块lp、partport_pc和partport存在依赖关系。

      在卸载它们时,要遵循怎样的顺序?答案是:自上而下的顺序。也就是,先卸载掉lp,然后是partport_pc,最后是partport。

      在安装它们时,要遵循的是自下而上的顺序,也就是先安装partport,然后装partport_pc,最后才是lp。

 

3.2 modprobe命令

 

      modprobe命令会根据“模块依存关系配置文件(Modules Dependencies Configure Files)"中的定义加载所需的模块,而无须在安装某个模块时,手动地将其依赖的模块一个一个安装起来。

     这些配置文件存放在/lib/modules/KERNEL_VERSION/下。和模块依存性定义直接有关的是modules.dep。

 

      命令格式:

      modprobe [-C CONFIG_FILE] [MODULE] [PARAMETER=VALUE...]

      modprobe [-r] [MODULE]

      modprobe -l [-C CONFIG_FILE] [-a] [MODULE]

      modprobe -c

 

     -C CONFIG_FILE: 指出内核模块配置文件的位置,默认为:/etc/modprobe.conf

     -r:卸载指定的模块

     -l:显示符合条件的模块文件路径名称

     -a:显示所有符合的模块文件路径名称

     -c:依照目前模块的状态,产生符合内核模块设置格式的设置值

 

例子:

# modprobe lp

 

[实验] 用命令modprobe -c来生成modprobe.conf文件。


4 产生模块相依性数据

 

      modprobe命令之所以能了解模块的相依性,它借助的是模块相依关系配置文件。这些文件在/lib/modules/KERNEL-VERSION/目录中。

        [root@airhouse 2.6.25-14.fc9.i686]# pwd
            /lib/modules/2.6.25-14.fc9.i686
         [root@airhouse 2.6.25-14.fc9.i686]# ls -l modules*
         -rw-r--r-- 1 root root 369114 2009-06-21 00:54 modules.alias
         -rw-r--r-- 1 root root   1616 2008-05-01 18:35 modules.block
         -rw-r--r-- 1 root root     69 2009-06-21 00:54 modules.ccwmap
         -rw-r--r-- 1 root root 332267 2009-06-21 00:54 modules.dep
         -rw-r--r-- 1 root root    147 2009-06-21 00:54 modules.ieee1394map
         -rw-r--r-- 1 root root    375 2009-06-21 00:54 modules.inputmap
         -rw-r--r-- 1 root root  12467 2009-06-21 00:54 modules.isapnpmap
         -rw-r--r-- 1 root root   1673 2008-05-01 18:35 modules.networking
         -rw-r--r-- 1 root root     74 2009-06-21 00:54 modules.ofmap
         -rw-r--r-- 1 root root  62584 2008-05-01 18:34 modules.order
         -rw-r--r-- 1 root root 265091 2009-06-21 00:54 modules.pcimap
         -rw-r--r-- 1 root root   1009 2009-06-21 00:54 modules.seriomap
         -rw-r--r-- 1 root root 150822 2009-06-21 00:54 modules.symbols
         -rw-r--r-- 1 root root 496310 2009-06-21 00:54 modules.usbmap

 

      如果需要重建这些配置文件,可以使用命令depmod [-b BASEDIR]。

 

5 内核模块配置文件

 

      RH系统的内核模块配置文件/etc/modprobe.conf,具备如下功能。

 

* 设置模块默认的参数

* 指定加载或卸载模块时执行什么操作,在调用modprobe、insmod或rmmod时,需要执行的命令

* 设置模块的别名