zoukankan      html  css  js  c++  java
  • insmod 加载模块的过程

    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中查看
    ————————————————
    版权声明:本文为CSDN博主「lihaoweiV」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lihaoweiv/article/details/6601009

    Always Believe Something Beauitful Will Be Happen
  • 相关阅读:
    【HDOJ】4412 Sky Soldiers
    【HDOJ】4579 Random Walk
    【HDOJ】4418 Time travel
    【HDOJ】4326 Game
    【HDOJ】4089 Activation
    【HDOJ】4043 FXTZ II
    【HDOJ】4652 Dice
    【HDOJ】3007 Buried memory
    mfc调用WPFDLL
    遍历系统中所有的进程,可根据名字或ID查找某一个线程
  • 原文地址:https://www.cnblogs.com/Oude/p/12513039.html
Copyright © 2011-2022 走看看