内核模块加载过程

加载过程
宏module_init本质是将内核中函数的指针指向模块的初始化函数.
启动时加载
过程:
  系统在进入与体系结构无关的内核部分后,开始调用/init/main.c中的start_kernel()函数.经过start_kernel()->rest_init()->kernel_thread()->kernel_init()->do_basic_setup()->do_initcalls()后.扫描__con_initcall_start和__con_initcall_end段之间的函数地址.随内核启动时加载模块的模块启动函数地址就在这个段中.
优先级:
  由五个因素控制:1内核模块的调用框架2.内核链接脚本(arch/x86/vmlinux.lds)3.makefile框架(部分大目录链接顺序由makefile中赋值语句决定,其余目录了链接顺序由makefile行序决定)4.模块代码声明5.编译器
  
动态加载
过程:
  用户空间的shell中输入insmod命令,insmod调用系统调用init_module(),init_module()陷入内核空间,调用内核函数sys_init_module().
  sys_init_module()执行以下步骤:
  1.检查模块许可;
  2.装载模块到内存(内核空间)mod=load_module(mod_name,args);
  3.将模块加入系统模块的linked list;
  4.通知正在等待模块改变的线程;
  5.将模块初始化mod_init();
  6.改变该模块的状态为MODULE_STATE_LIVE;
  7.return.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值