Linux-2.6-LKM-load-analyse

Linux-2.6-LKM-load-analyse

ID:40083641

大小:379.61 KB

页数:90页

时间:2019-07-20

Linux-2.6-LKM-load-analyse_第1页
Linux-2.6-LKM-load-analyse_第2页
Linux-2.6-LKM-load-analyse_第3页
Linux-2.6-LKM-load-analyse_第4页
Linux-2.6-LKM-load-analyse_第5页
资源描述:

《Linux-2.6-LKM-load-analyse》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、Linux2.6内核模块载入过程解析前言..........................................................................................................1LKM是什么.....................................................................................................4内核模块载入流程分析..................................

2、..........................................................9内核模块载入源代码注解..........................................................................................11附录.........................................................................................................87例子代码....

3、..............................................................................................87Makefile.................................................................................................89编译命令........................................................................

4、..........................89联系.........................................................................................................89前言本来是在整理以前读2.4内核的LoadableKernelModule(LKM)的载入过程的笔记的,为了与时俱进,就想看一下在2.6内核下LKM是怎样被载入的。不看不要紧,一看下一跳。不但整个载入过程被彻底重新写过,而且实现机制也完全变掉了。就连原来载入的工具包的名字也从“mod

5、utils”变成了“module-init-tools”。在2.4内核中载入的核心工作实际上是在insmodutility的用户态完成的,而到了2.6,insmod用户态的代码简单得不能再简单,99%的工作全部移到了内核中去完成。我没有去分析或到网上去查那些Linux大师们的想法,但单从代码上看,我觉得这次改变是成功的---载入的思路比以前清晰多了,代码也比2.4时干净简洁(2.4的insmod代码给人零乱而琐碎,当然或许是我的水平太低)。在2.4中,为了支持LKM,内核开放出如下的systemcallSYS(sys_create_module,2)S

6、YS(sys_init_module,5)SYS(sys_delete_module,1)SYS(sys_get_kernel_syms,1)到了2.6,由于实现机制的变化,内核只需要开放如下systamcall即行。cond_syscall(sys_init_module);cond_syscall(sys_delete_module);原来2.4中的sys_create_module()是一个莫名其妙的systemcall,它实际上几乎不会被单独用到,它存在的目的就是为了给要载入的LKM分配内核空间的内存。而sys_get_kernel_syms(

7、)是为了获得内核及已载入LKM的输出symbol。这两个systemcall的存在纯粹是因为载入LKM的工作在2.4内核中被拆分成insmod的用户态部分与内核部分(即上面的系统调用)。两者及其紧密的交互,在用户态没法干或没法获得的,则要委托内核来干。比如用户态没办法分配内核空间的内存,所以要有sys_create_module(),用户态没办法获得在内核的symbol,所以要有sys_get_kernel_syms()。而很大一部分工作在用户态工作在用户态完成。整个2.4中载入LKM的工作方式如下图中的左图,而2.6工作方式如下图中的右图。2.4的工

8、作方式2.6的工作方式用户空间内核空间由于整个的工作全部的移到内核中,不需要如2.4中那样的互

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
相关文章
更多
相关标签