OpenHarmony(9) —— load ELF

  还没具体看Harmony HDF 驱动框架。

  Linux宏内核,但采用了LKM机制,可以动态增删模块,增加了自由度。而对于微内核的思想,其实没有“驱动”和“程序”之分。

  但还是喜欢linux insmod/rmmod *.ko这样的模块动态加载,LKM机制确实很方便。

  看看Linux怎么实现的吧。

  编译linux驱动需要用到linux源码树的symbols, 如System.map文件等

  先看下别人的分析

《Linux内核模块LKM的动态加载技术分析》 https://blog.csdn.net/ganggexiongqi/article/details/6788270

4       动态加载链接的实现细节
了解 LKM 动态加载链接的基础知识之后,现在我们进一步探索模块是如何进入内核的,以及在内核内部是如何管理模块的。构建 LKM时,可以使用典型的用户工具管理模块:标准 insmod(安装 LKM),rmmod(删除LKM),modprobe(insmod 和 rmmod 的包装器),depmod(用于创建模块依赖项),以及modinfo(用于为模块宏查找值)。
 
4.1    LKM 的生命周期
在用户空间中,insmod(插入模块)启动模块加载过程。insmod 命令定义需要加载的模块,并调用 init_module用户空间系统调用,开始加载过程。2.6 版本内核的 insmod 命令经过修改后变得非常简单,可以在内核中执行更多工作。insmod 并不进行所有必要的符号解析,它只是通过 init_module函数将模块二进制文件复制到内核,然后由内核完成剩余的任务。
 
init_module 函数通过系统调用层,进入内核到达内核函数 sys_init_module(参见图3)。这是加载模块的主要函数,它利用许多其他函数完成困难的工作。类似地,rmmod 命令会使 delete_module 执行 system call 调用,而 delete_module 最终会进入内核,并调用 sys_delete_module 将模块从内核删除。

图 3 加载和卸载模块时用到的主要命令和函数
 
在模块的加载和卸载期间,模块子系统维护了一组简单的状态变量,用于表示模块的操作。加载模块时,状态为MODULE_STATE_COMING。如果模块已经加载并且可用,状态为 MODULE_STATE_LIVE。此外,卸载模块时,状态为MODULE_STATE_GOING。
 
4.2    模
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值