概述
mod 相关命令都是用来动态加载内核模块/驱动程序模块
module-init-tools:Linux 内核可加载模块管理工具
rpm -ql module-init-tools
/etc/depmod.d
/etc/depmod.d/dist.conf
/etc/modprobe.d
/etc/modprobe.d/dist-alsa.conf
/etc/modprobe.d/dist-oss.conf
/etc/modprobe.d/dist.conf
/etc/modprobe.d/local.conf
/sbin/depmod
/sbin/insmod
/sbin/insmod.static
/sbin/lsmod
/sbin/modinfo
/sbin/modprobe
/sbin/rmmod
/sbin/weak-modules
其实跟程序的动态库的原理和作用一样, 内核在用到的时候调用相应的内核模块, 内核模块化
Linux 驱动程序有两种加载方式: 一种是静态地编译进内核, 内核启动时自动加载, 另一种是编写为内核/驱动模块, 使用 insmod 命令将模块动态加载到正在运行的内核
不需要时用 rmmod 命令将模块卸载.
LVS 的 IPVS 模块也是采用动态加载的方式
命令有六个:modprobe(Linux 2.6 新增), depmod,insmod , lsmod,rmmod,modinfo
mod:module 内核模块
modprobe, insmod 和 depmod 包含在一个名为 modutils 或 mod-utils 的工具包
modprobe
Linux 命令:modprobe .
功能说明: 自动处理可载入模块.
语 法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值].
补充说明:modprobe 可载入指定的个别模块, 或是载入一组相依的模块.modprobe 会根据 depmod 所产生的相依关系, 决定要载入哪些模块. 若在载入过程中发生错误, 在 modprobe 会卸载整组的模块.
- modprobe 命令是根据 depmod -a 的输出/lib/modules/kernel version/modules.dep 来加载全部的所需要模块.
- 删除模块的命令是:modprobe -r filename.
- 系统启动后, 正常工作的模块都在/proc/modules 文件中列出. 使用 lsmod 命令也可显示相同内容.
- 在内核中有一个"Automatic kernel module loading"功能被编译到了内核中. 当用户尝试打开某类型的文件时, 内核会根据需要尝试加载相应的模块.
/etc/modules.conf 或 /etc/modprobe.conf 文件是一个自动处理内核模块的控制文件.
cat /lib/modules/version/modules.dep
cat: /lib/modules/version/modules.dep: No such file or directory
参数
-a 或--all 载入全部的模块.
-c 或--show-conf 显示所有模块的设置信息.
-d 或--debug 使用排错模式.
-l 或--list 显示可用的模块.
-r 或--remove 模块闲置不用时, 即自动卸载模块.
-t 或--type 指定模块类型.
-v 或--verbose 执行时显示详细的信息.
-V 或--version 显示版本信息.
-help 显示帮助.
操作
insmod 与 modprobe 都是载入 kernel module, 不过一般差别在于 modprobe 能够处理 module 载入的依赖问题.
比如你要载入 a module, 但是 a module 要求系统先载入 b module 时, 直接用 insmod 载入通常都会出现错误讯息, 不过 modprobe 倒是能够知道先载入 b module 后才载入 a module, 如此相依性就会满足.
不过 modprobe 并不是大神, 不会厉害到知道 module 之间的相依性为何, 该程序是读取 /lib/modules/2.6.xx/modules.dep
文件得知依赖的. 而该档案是透过 depmod 程式所建立.
modprobe -r igb 删除 igb 模块
使用模块选项有两个方法
第一个 加载 igb 的时候到 igb.conf 文件里找
echo "options igb max_vfs=7" >>/etc/modprobe.d/igb.conf
modprobe igb
第二个 在命令里指定选项
modprobe igb max_vfs=7
深度实践 KVM P49
depmod
模块依赖程序
/sbin/depmod -a
遍历文件/lib/modules/内核版本/modules.dep (模块依赖关系 该文件由 depmod -a 命令建立的, 保存了内核模块的依赖关系, 使得在装入指定模块前装入那些事先需要装入的模块
insmod
载入模块
insmod first_time.ko
lsmod
列出内核已加载的模块
lsmod
Module Size Used by
kvm 337772 1 kvm_intel kvm 内核模块
ipmi_si 44687 1 acpi_ipmi
ipmi_msghandler 38826 2 acpi_ipmi, ipmi_si
rmmod
卸载模块
rmmod first_time.ko
modinfo
查看模块信息
modinfo first_time.ko
[root@localhost huage]# lsmod //列出当前系统已加载的模块
Module Size Used by
usb_storage 39114 0
cdrom 34035 1 sr_mod
[root@localhost huage]# lsmod |grep usb-storage
[root@localhost huage]# modprobe -r usb_storage //删除模块; 删除模块时需要加'-r'参数
[root@localhost huage]# lsmod |grep usb
[root@localhost huage]# modprobe usb-storage //添加模块; 添加模块时, 直接加模块名就可以了
[root@localhost huage]# lsmod |grep usb
usb_storage 39114 0
//使用 modprobe 命令添加或删除模块时,'_'和'-'没有区别, 即下划线和中划线没有区别
不要跟 ldd 命令搞混了, ldd 是显示程序所用的动态库 load dynamic library
modprobe, insmod 和 depmod 包含在一个名为 modutils 或 mod-utils 的工具包内. 这些工具帮助你自动或手动地装载模块. 有的时候你想人为控制一个模块什么时候被装入, 例如当装入某个模块会导致问题时, 你不想让某个模块被 kernel 自动装入, 你可以把这个模块列到黑名单中不让它跨进内核的大门.
在 Linux 2.6 之前, 驱动模块是智能型的, 它的加载是通过扫描总线寻找它识别的设备 ID 号来实现.Linux2.6 把这部分功能做了梳理, 化复杂为简单, 硬件检测外部化. 利用外部程序以及模块加载器来判断模块支持哪些设备. 除了 insmod 与 rmmod 外, Linux 2.6 加载命令还有 modprobe.modprobe 同时会加载当前模块所依赖的其他模块.
在 Red Hat Linux 中, 还可以使用 PnP 设备的检测程序 kudzu 来检测和配置硬件.
文章评论