google 程序员 php HTML5 Ubuntu apache centos Android 微软 wordpress java 开源 mysql nginx Windows linux linux命令 shell Python Firefox

Linux加载内核模块

1,查看现在内核加载的模块

#lsmod

命令是通过读取/proc/modules/中的内容来查看的

2,载入模块

当内核所需要的扩展功能不存在时,内核模块管理守护进程kmod执行modprobe去加载内核模块,两种类型的参数可以传给modprobe

a.模块的名字,像softdog
b.通用识别符,像char-major-10-30

当传给modprobe的参数是通用识别符时,modprobe首先在/etc/modprobe.conf中查找该字符串,如果它发现有一行像

alias har-major-10-30 softdog

说明要加载的是softdog.so模块

然后modprobe读取/lib/moudles/(uname -r)/modules.dep来判断是否有其他内核模块需要在加载此模块前加载。该文件是由命令depmod -a来创建的,保存着内核模块的依赖关系。

最终modprobe调用insmod来先加载需要依赖的模块,然后加载此模块。insmod将指向/lib/modules/(uname -r)/kernel/目录,为模块的专门存放的目录。

如果想要载入一个模块有两种办法:

方法1:insmod /lib/modules/(uname -r)/kernel/fat/fat.o #必须要写明全部的路径,因为insmod是很呆板的。
方法2:modprobe -a fat #modprobe会调用insmod来加载模块。

modprobe, insmod及depmod在一个名为modutils的工具包内。

3,卸载模块

#rmmod sysdog

使用“rmmod 模块名”来卸载相应的模块。

和modules有关的命令有:

  • lsmod: 列出已被内核调入的模块
  • insmod: 将某个module插入到内核中
  • rmmod: 将某个module从内核中卸载
  • depmod: 生成依赖文档,告诉将来的 insmod 要从哪儿调入 modules。这个依赖文档就在/lib/modules/[您的kernel版本]/modules.dep。
  • Kerneld: 负责自动的将模块调入内核和把模块从内核中卸载。

延伸阅读

评论