1,insmod
insmod 是靠一个在kernel/module.c里定义的系统调用来实现的。
1. 此系统调用(sys_init_module )分配内核存储空间(kernel memory)给相关的模块,这个内存分配动作是由vmalloc完成;对应的系统调用: SYSCALL_DEFINE3(init_module, void __user *, umod, unsigned long, len, const char __user *, uargs) 。
2. 然后将该模块内容拷贝到这块存储空间里;
3. 接着声明内核引用该模块;
4. 呼叫该模块的初始化涵数
这样,一个插入模块的过程就完成了。
2,modprobe
modprobe 能 实现 insmod的功能, 而且比insmod要强大一些。
它在加载模块的时候,自己检查模块里有没有一些symbol在内核里没有定义的,如果有这样的symbol,modprobe函数会搜索其他模块,看其他模块里有没有相关的symbol,如果有,则将此模块也一起加载,这样的话,就算模块里有一些没有定义的symbol也能成功加载。但如果用insmod去加载的话,遇到这种情况就会加载失败。会出现"unresolved symbols"信息。
3,lsmod
lsmod命令用来查看当前已经被加载的模块。 它是通过读出/proc/modules 这个虚拟文件来实现。
本文介绍了Linux内核模块的相关操作命令。insmod靠系统调用sys_init_module实现,完成分配内核存储空间、拷贝模块内容等步骤插入模块;modprobe功能更强,能检查模块未定义的symbol并加载相关模块;lsmod通过读取虚拟文件查看已加载模块。
823

被折叠的 条评论
为什么被折叠?



