跳转到内容

LPI Linux 认证/内核运行时管理和查询

来自维基教科书,自由的教科书

权重:4

描述
考生应该能够管理和/或查询内核和内核可加载模块。

  • 关键知识领域
    • 使用命令行工具获取有关当前运行的内核和内核模块的信息。
    • 手动加载和卸载内核模块。
    • 确定何时可以卸载模块。
    • 确定模块接受哪些参数。
    • 配置系统以使用除文件名以外的其他名称加载模块。
  • 以下是用到的文件、术语和工具的部分列表
    • /lib/modules/kernel-version/modules.dep
    • /etc/modules.conf
    • /etc/modprobe.conf
    • depmod
    • insmod
    • lsmod
    • rmmod
    • modinfo
    • modprobe
    • uname

获取有关内核和模块的信息

[编辑 | 编辑源代码]

要显示当前运行的内核版本,请使用uname命令

uname -r
uname -v

lsmod 命令可用于显示当前已加载的内核模块

$ lsmod
Module                  Size  Used by
nls_iso8859_1           3261  0 
nls_cp437               4931  0 
vfat                    9201  0 
fat                    48240  1 vfat
usb_storage            40172  0
.............

Used by 列显示有多少模块依赖于给定的模块。在上面的示例中,vfat 依赖于 fat,必须先加载 fat

加载和卸载模块

[编辑 | 编辑源代码]

要加载和卸载内核模块,您需要超级用户权限。

insmod - 此命令可用于加载内核模块(但是建议使用modprobe)。它会由工具自动定位,但此命令在低级运行,不会解析模块依赖关系。下面的命令失败,因为vfat 模块需要先加载fat

# insmod /lib/modules/2.6.35-22-generic/kernel/fs/fat/vfat.ko
insmod: error inserting '/lib/modules/2.6.35-22-generic/kernel/fs/fat/vfat.ko': -1 Unknown symbol in module

当我们先加载fat 模块时,一切正常

# insmod /lib/modules/2.6.35-22-generic/kernel/fs/fat/fat.ko 
# insmod /lib/modules/2.6.35-22-generic/kernel/fs/fat/vfat.ko

rmmod - 此命令可用于从正在运行的内核中删除模块。与insmod 一样,它不会解析依赖关系

# rmmod fat
ERROR: Module fat is in use by vfat
# rmmod vfat
# rmmod fat


modprobe - 此命令允许加载和卸载模块,并使用 System.map 文件(即 /lib/modules/2.6.31-21-generic/modules.dep)自动解析依赖关系。要加载模块,请使用带有模块名称作为参数的命令。它将确保所有必需的模块都已加载

# modprobe vfat

要使用modprobe 命令删除模块,请使用 -r 开关

# modprobe -r vfat

要列出当前正在运行的内核的所有可用模块,请使用 -l 开关

# modprobe -l
..................
kernel/drivers/net/ne2k-pci.ko
kernel/drivers/net/8390.ko
kernel/drivers/net/pcnet32.ko
kernel/drivers/net/e100.ko
kernel/drivers/net/tlan.ko
kernel/drivers/net/epic100.ko
kernel/drivers/net/smsc9420.ko
kernel/drivers/net/sis190.ko
kernel/drivers/net/sis900.ko
..................


要确定是否可以安全地删除模块,请使用上面描述的lsmod 命令。您必须确保最后一列中的数字为 0(因此没有模块使用您要删除的模块)

获取有关模块的信息

[编辑 | 编辑源代码]

modinfo - 可用于显示有关模块的信息。常见的开关是-a 用于显示作者信息,-d 用于显示描述,-p 用于显示模块接受的选项(参数)

$ modinfo  bonding
filename:       /lib/modules/2.6.35-22-generic/kernel/drivers/net/bonding/bonding.ko
alias:          rtnl-link-bond
author:         Thomas Davis, [email protected] and many others
description:    Ethernet Channel Bonding Driver, v3.6.0
version:        3.6.0
license:        GPL
srcversion:     EC8FCCE4D57BF7B3823F70F
depends:        
vermagic:       2.6.35-22-generic SMP mod_unload modversions 686 
parm:           max_bonds:Max number of bonded devices (int)
parm:           num_grat_arp:Number of gratuitous ARP packets to send on failover event (int)
parm:           num_unsol_na:Number of unsolicited IPv6 Neighbor Advertisements packets to send on failover event (int)
parm:           miimon:Link check interval in milliseconds (int)
.....................

创建名称别名

[编辑 | 编辑源代码]

要创建一个由modprobe 命令使用的别名,需要将其添加到其配置文件之一中。可以是 /etc/modprobe.conf 或 /etc/modprobe.d/ 目录中的文件。下面的示例条目将eth0 定义为 bnx2 网卡驱动程序的别名,而scsi_hostadapter 将是 mptbase 的别名。添加条目后,可以使用modprobe eth0 加载 bnx2 网卡模块。

alias eth0 bnx2
alias scsi_hostadapter mptbase


华夏公益教科书