在整个启动过程中,能否成功地启动主机的硬件,是核心的工作。而核心一般都是压缩文件,因此在使用核心之前,就要将核心解压缩后,才能加载到主存储器中。目前的核心都具有“可读取模块化驱动程序”的功能,可以将模块想象成是一个“外挂程序”。下面介绍一些有关内容:
   *  核心存放位置:/boot/vmlinuz
   *  核心解压缩所需的RAM Disk:/boot/initrd
   *  核心模块:/lib/modules/`uname -r`/kernel
   *  核心源码:/usr/src/linux(安装才有,默认不安装)
   *  系统核心功能:/proc/sys/kernel
  如有有一个新硬件,操作系统不支持时,一般采取两种方式:
   *  重新编译核心(不容易)
   *  将硬件的驱动程序编译为模块,在启动时加载该模块
  下面仅说明加载模块的方法

一、核心模块与依赖性

  核心放在/lib/modules/`uname -r`/kernel中,里面主要分成几个目录
  arch:与硬件平台有关的项目,例如CPU的等级等。
  crypto:核心所支持的加密技术,如md5等
  drivers:一些硬件的驱动程序
  fs:核心所支持的文件系统
  lib:一些函数库
  net:与网络有关的各项协议数据,还有防火墙模块等
  sound:与音效有关的各模块
  在Linux系统中提供了/lib/modules/`uname -r`/modules.dep文件用来记录核心支持的模块的各项依赖性。
  使用depmod命令就可以建立该文件
  [root@redflag ~]# depmod   (具体参数使用man来查看)
  范例:更新网卡的驱动程序
  [root@redflag ~]#  cp /full/path/a.ko /lib/modules/`uname -r`/kernel/driver/net
  [root@redflag ~]#  depmod

二、核心模块的观察:lsmod、modinfo

  1. 查询当前系统加载的模块:lsmod

  [root@redflag ~]# lsmod
   Module                  Size   Used by
   joydev                  11841    0 
   ……
   ds                      21449    0 
   yenta_socket            22977    0 
   pcmcia_core             69329    2 ds,yenta_socket
   dm_mirror               32465    0 
   ……
  [root@redflag ~]#
  显示内容包括:
   * 模块名称
   * 模块的大小
   * 此模块是否被其他模块所用
    2. 查看每个模块的信息:modinfo
  [root@redflag ~]# modinfo bnx2
   filename:       /lib/modules/2.6.9-42.ELsmp/kernel/drivers/net/bnx2.ko
   parm:           disable_msi:Disable Message Signaled Interrupt (MSI)
   version:        1.4.38 E1B1EC867DEEB8027B2DA0F
   license:        GPL
   description:    Broadcom NetXtreme II BCM5706/5708 Driver
   author:         Michael Chan [email protected]
   alias:          pci:v000014E4d000016ACsv*sd*bc*sc*i*
   alias:          pci:v000014E4d000016AAsv*sd*bc*sc*i*
   alias:          pci:v000014E4d000016AAsv0000103Csd00003102bc*sc*i*
   alias:          pci:v000014E4d0000164Csv*sd*bc*sc*i*
   alias:          pci:v000014E4d0000164Asv*sd*bc*sc*i*
   alias:          pci:v000014E4d0000164Asv0000103Csd00003106bc*sc*i*
   alias:          pci:v000014E4d0000164Asv0000103Csd00003101bc*sc*i*
   depends:        
   vermagic:       2.6.9-42.ELsmp SMP gcc-3.4
三、核心模块的加载与删除:insmod、modprobe、rmmod

  1.完全由用户自行加载一个完整文件名的模块,但不会主动分析模块的依赖性:insmod

    范例:加载smbfs.ko模块
   [root@redflag ~]# insmod /lib/modules/`uname -r`/kernel/fs/smbfs/smbfs.ko
   [root@redflag ~]#lsmod | grep smbfs
    smbfs    67897  0
    2.删除模块:rmmod
   
[root@redflag ~]# rmmod [-wf] module_name
   参数:
    -f:强制将该模块删除
    -w:若模块正在使用,那么等待使用完毕后删除
   3.加载过程中主动分析模块依赖性:modprobe
   
目前推荐使用的就是modprobe命令,这是因为modprobe会主动搜索modules.dep的内容,解决了模块的依赖性后,才决定需要加载的模块
   [root@redflag ~]# modprobe [-lcf] module_name
   参数:
    -c:列出当前系统所有的模块
    -l:列出当前在/lib/modules/`uname -r`/kernel中的所有模块完整文件名
    -f:强制加载该模块
    -r:类似rmmod
   范例:加载smbfs模块
   [root@redflag ~]# modprobe smbfs
    #不需要知道完整的模块文件名,这是因为该完整文件名已经记录到/lib/modules/`uname -r`/modules.dep中
   [root@redflag ~]#modprobe -r smbfs