insmod加载模块的过程

http://blog.csdn.net/lihaoweiv/article/details/6601009

insmod 是靠一个在kernel/module.c里定义的系统调用来实现的。

1. 此系统调用(sys_init_module )分配内核存储空间(kernel memory)给相关的模块,这个内存分配动作是由vmalloc完成;

2. 然后将该模块内容拷贝到这块存储空间里;

3. 接着声明内核引用该模块;

4. 呼叫该模块的初始化涵数

这样,一个插入模块的过程就完成了。

该函数准确应该是在 linux/kernel/module.c里, 但是在里面你不会找到sys_init_module这个函数,因为这个函数是通过一个宏来实现的,

> /* This is where the real work happens */ 
> SYSCALL_DEFINE3(init_module, void __user *, umod, 
> unsigned long, len, const char __user *, uargs)

这个宏就代表了sys_init_module这个函数。

********************modprobe 与 insmod的区别********************

modprobe 能 实现 insmod的功能, 而且比insmod要强大一些。

它在加载模块的时候,自己检查模块里有没有一些symbol在内核里没有定义的,如果有这样的symbol,modprobe函数会搜索其他模块,看其他模块里有没有相关的symbol,如果有,则将此模块也一起加载,这样的话,就算模块里有一些没有定义的symbol也能成功加载。但如果用insmod去加载的话,遇到这种情况就会加载失败。会出现"unresolved symbols"信息。

********************lsmod命令********************

lsmod命令用来查看当前已经被加载的模块。 它是通过读出/proc/modules 这个虚拟文件来实现。 更多的关于当前已加载模块的信息可以在/sys/module中查看

insmod 加载模块过程、modprobe 与 insmod的区别 、lsmod命令相关推荐

  1. insmod 加载模块的过程

    insmod 是靠一个在kernel/module.c里定义的系统调用来实现的. 1. 此系统调用(sys_init_module )分配内核存储空间(kernel memory)给相关的模块,这个内 ...

  2. Linux驱动之内核加载模块过程分析

    Linux内核支持动态的加载模块运行:比如insmod first_drv.ko,这样就可以将模块加载到内核所在空间供应用程序调用.现在简单描述下insmod first_drv.ko的过程 1.in ...

  3. linux insmod命令参数及用法详解--linux加载模块命令

    insmod(install module) 功能说明:载入模块 install loadable kernel module 语法:insmod [-fkmpsvxX][-o <模块名称> ...

  4. modprobe命令用于智能地向内核中加载模块或者从内核中移除模块

    modprobe命令用于智能地向内核中加载模块或者从内核中移除模块. modprobe可载入指定的个别模块,或是载入一组相依的模块.modprobe会根据depmod所产生的相依关系,决定要载入哪些模 ...

  5. modprobe:用于向内核中加载模块或者从内核中移除模块

    modprobe br_netfilter 加载模块 modprobe -r br_netfilter 移除 1.查看系统中所有modules(包括已加载和未加载的) ls -alRUv /lib/m ...

  6. modprobe:用于向内核中加载模块或者从内核中移除模块。

    modprobe:用于向内核中加载模块或者从内核中移除模块. modprobe br_netfilter 加载模块 modprobe -r br_netfilter 移除 1.查看系统中所有modul ...

  7. 用modprobe 加载模块时,提示模块找不到的问题

    用modprobe 加载模块时,提示模块找不到的问题,如在/home目录下有个编译好的模块:helloworld.ko, 当我们运行 sudo modprobe /home/helloworld.ko ...

  8. linux modprobe自动加载,modprobe 开机自动加载模块的方法 亲测成功

    再次鄙视那些凭空臆测就发表技术文章和那些不分好坏疯狂采集的人.浪费大家的时间,你们罪当诛杀! 添加开机自动加载模块,在各大搜索引擎发现很多误导的技术文章,浪费我的时间,气死了. 下面是本人测试成功的. ...

  9. [driver]linux内核动态加载模块

    问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...

最新文章

  1. Unity从零开始构建能力体系 Unity Ability System
  2. 中山大学“核技术灭蚊”上热搜,广州蚊子工厂日产500万只绝育蚊子|Nature
  3. 老师学python可以干嘛-你都用 Python 来做什么?
  4. 实战c++中的vector系列--vectorlt;unique_ptrlt;gt;gt;初始化(全部权转移)
  5. 正则表达式获取body内容
  6. 用设计模式去掉没必要的状态变量 —— 状态模式
  7. 2017.5.3 博客园自动生成章节目录
  8. Spring Boot : ApplicationListner
  9. 普通程序员,如何转型大数据相关方向?
  10. HTML之表格的基本知识
  11. CSS使表格不变形(原创)
  12. 安卓* 系统级 Java*/C++ 代码调试
  13. iOS-@inerface的11条规范写法
  14. 云呐|固定资产盘点管理办法
  15. 《凤凰项目-一个IT运维从传奇故事》总结
  16. IBM p720 在HMC上创建分区并安装AIX系统
  17. EPLAN 电气工程图纸
  18. 阿里收购优酷土豆:内容进入GGC时代!
  19. 基于IMS的VoLTE业务
  20. SEO优化 网站结构优化

热门文章

  1. request库的基本用法
  2. 如何使用 开源硬件Banana PI BPI-R2‘s GPIO-s
  3. 级联(cascade)
  4. 常用的加密有哪些?在Java中如何实现?(MD5、AES、RSA)
  5. 【基础】Flink -- DataStream API
  6. 关于pip安装gap_statistic
  7. 【RK3399】[Android 6.0] linux4.4 调试8723BU记录过程
  8. 【C语言】实现两个字符串的连接(不使用库函数),即把字符串b连接到字符串a后面。
  9. PTA习题 7-4 定义抽象类Person、派生类Student和类Teacher
  10. 苹果开发者账号注册错误:关联的Apple ID国家/地区并不匹配