- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 模块的动态加载和系统配置;第9章 模块的动态加载和系统配置;9.1 模块的动态加载;9.1 模块的动态加载; 动态可加载代码的优点是可以让内核保持很小的尺寸并非常灵活。模块机制可以无需重构内核并频繁重新启动来尝试运行新内核代码。用户可以根据自己系统的需要构筑自己的私有内核。Linux源码的公开更是为改造其内核、重建有特殊要求的操作系统提供了可能。
; 模块必须能够找到其需要使用的内核资源。例如模块需要分配内存时,要调用内核的内存分配例程kmalloc()。但在构造模块时并???知道kmalloc()在内存中何处,这样内核必须在使用这些模块前修改模块中对 kmalloc()的引用地址。内核在其内核符号表中维护着一个内核资源链表这样当加载模块时它能够解析出模块 中对内核资源的引用。Linux还允许存在模块堆栈,它在模块之间相互调用时使用。
例如,因为VFAT(VirtuaI File Allocation Table)文件系统是从FAT(File Allocation Table)文件系统中扩展而来,VFAT文件系统模块可能需要FAT文件系统模块的服务。某个模块对其他模块的服务或资源的需求类似于模块对内核本身资源或服务的请求。不过此时所请求的服务是来自另外一个事先已加载的模块。当加载模块时,内核就把新近加载模块输出的所有资源和符号添加到内核符号表 (Kernel-Symbol-Table) 中。
;
在/proc/ksyms.里面的每一个表项代表着一个公共的内核符号,这就是内核符号表。这些内核符号是可以被LKM引用的。LKM中所存取的每一个符号(像函数名)也会被列在这个文件里面。在该文件中可以看到LKM到底可以调用那些函数。
当试图卸载某个模块时,内核需要知道此模块是否已经没有被使用,同时它需要有种方法来通知此将卸载模块。 模块必须能够在从内核种删除之前释放其分配的所有系统资源,如内核内存或中断。当模块被卸载时,内核将从内核符号表中删除所有与之对应的符号。 ;但是,内核模块的引入也带来了如下问题: ;但是,内核模块的引入也带来了如下问题: ;但是,内核模块的引入也带来了如下问题: ;但是,内核模块的引入也带来了如下问题: ;但是,内核模块的引入也带来了如下问题: ;9.1.1模块的加载;9.1.1模块的加载;9.1.1模块的加载; 当内核发现有必要加载某个模块时,如用户安装了内核中不存在的文件系统时,内核将请求内核后台进程(kerneld)准备加载适当的模块。这个内核后台进程仅仅是一个带有超级用户权限的普通用户进程。当系统启动时它也被启动并为内核打开了一个进程间通讯(IPC)通道。内核可以利用该通道向Kerneld进程发送任务的执行请求。Kerneld进程的主要功能是加载和卸载模块,另外,该进程也负责其他一些任务,例如打开和关闭 PPP 链接等。kerneld自身并不执行这些任务,它通过某些程序如insmod来做此工作。因此,该进程实际是代表内核进行调度的代理。
; 执行 insmod 命令时,必须指定要加载模块的位置;对需求加载的内核模块,通常保存在 /lib/modules/kernel-version。和系统的其他程序一样,内核模块实际是经连接的目标文件,但模块是可重定位的,也就是说,为了让装入的模块和已有的内核组件之间可以互相访问,模块不能连接为从特定地址执行的映像文件。模块可以是 a.out 或 elf 格式的目标文件。insmod 利用一个特权系统调用,可找到内核的导出符号表,符号成对出现,一个是符号名称,另外一个是符号的值,例如符号的地址。内核维护一个由 module_list 指针指向的 module 链表,其中第一个 module 数据结构保存有内核的导出符号表(见图 9.1)。并不是所有的内核符号均在符号表中导出,而只有一些特殊的符号才被添加到符号表中。例如,“request_irq”是一个导出符号,它是一个内核例程,可由驱动程序申请控制某个特定的系统中断。利用 ksyms 命令或查看 /proc/ksyms 文件内容,可非常方便地看到所有的内核导出符号及其符号值。利用 ksyms 命令,不仅可以看到内核的所有符号,也可以看到只由以加载模块导出的符号。insmod 命令将模块读到它本身的虚拟内存中,然后利用内核导出的符号表,修正尚未解析的对内核例程的引用。这种修正实际是对模块在内存中的映像进行修正,insmod 将符号的地址写入模块中适当的位置而实现修正。
;图 9.1 装入 VFAT 和 FAT 之后的内核模块表 ; insmod 命令修正模块对内核符号的引用之后,再次利用特权系统调用请求内核分配足够的物理内存空间保存新的模块。内核将分配新的
您可能关注的文档
最近下载
- 奶茶店兼职劳务合同模板(3篇).docx
- OTIS奥的斯XIOTIS西子奥的斯标准ACD4MR电气原理图XAA21310AT注解版.pdf
- 健康体重课件小学生版最新完整版本.pptx VIP
- 内分泌性高血压筛查专家共识(2025版).pdf VIP
- 高级教师职称面试讲课答辩题目及答案(分五类共60题).docx VIP
- 全国智能制造应用技术技能大赛理论知识题库资料(核心500题).pdf VIP
- 安全生产台账建立与完善策略.docx VIP
- 矿山井巷施工施工组织设计 (1).pdf VIP
- CRM坐席操作手册.pdf VIP
- 2025年新高考物理压轴题专项训练09 电磁感应中的单双棒问题 含解析 .docx VIP
文档评论(0)