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