- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验五__内核模块设计实验.
实验五 内核模块设计实验
文章由网提供
现代的Linux内核是具有微内核特点的宏内核。Linux内核作为一个大程序在内核空间运行。太多的设备驱动和内核功能集成在内核中,内核过于庞大。
Linux内核引入内核模块机制。通过动态加载内核模块,使得在运行过程中扩展内核的功能。不需要的时候,卸载该内核模块。
内核模块
内核模块是一种没有经过链接,不能独立运行的目标文件,是在内核空间中运行的程序。经过链接装载到内核里面成为内核的一部分,可以访问内核的公用符号(函数和变量)。
内核模块可以让操作系统内核在需要时载入和执行,在不需要时由操作系统卸载。它们扩展了操作系统内核的功能却不需要重新启动系统。
如果没有内核模块,我们不得不一次又一次重新编译生成单内核操作系统的内核镜 像来加入新的功能。这还意味着一个臃肿的内核。
内核模块是如何被调入内核工作的?
当操作系统内核需要的扩展功能不存在时,内核模块管理守护进程kmod执行modprobe去加载内核模块。
modprobe遍历文件/lib/modules/version/modules.dep 来判断是否有其它内核模块需要在该模块加载前被加载。
最后modprobe调用insmod先加载被依赖的模块,然后加载该被内核要求的模块。
内核模块是如何被调入内核工作的?
Insmod将调用init_module系统调用,传入参数
(Module.c)Sys_init_module系统调用检查权限后,并查找modules链表,验证模块未被链接。然后分配一个module结构体变量描述该内核模块。
如果定义了模块的init方法,则执行init方法。
模块机制的特点:
减小内核映像尺寸,增加系统灵活性;
节省开发时间;修改内核,不必重新编译整个内核。
模块的目标代码一旦被链入内核,作用和静态链接的内核目标代码完全等价。
最简单的内核模块
任一个内核模块需要包含linux/module.h
初始化函数init_module(),在模块加载到内核时被调用。init_module()向内核注册模块的功能,申请需要的资料等初始化工作。
卸载函数cleanup_module() ,在内核模块被卸载时被调用,干一些收尾清理的工作,撤消任何初始化函数init_module()做的事,保证内核模块可以被安全的卸载。
printk( )函数
printk 函数在 Linux 内核中定义并且对模块可用,为内核提供日志功能, 记录内核信息或用来给出警告。与标准 C 库函数 printf 的行为相似。
每个printk() 声明都会带一个优先级。内核总共定义了八个优先级的宏, 在linux/kernel.h中定义。若你不指明优先级,DEFAULT_MESSAGE_LOGLEVEL这个默认优先级将被采用。
信息存在在内核消息缓冲区中,并被定时的添加到文件 /var/log/messages,可直接查看,或者用命令dmesg查看。在X-windows下的终端insmod一个模块,日志信息只会记录在日志文件中,而不在终端打印。
从内核Linux 2.4之后,可以为模块的“初始化”和“卸载”函数起任意的名字。不再必须使用 init_module()和cleanup_module()的名字。
通过宏 module_init()和module_exit()实现。这些宏在linux/init.h中定义。
module_init(hello_2_init);
module_exit(hello_2_exit);
函数必须在宏的使用前定义,否则编译会报错。
关于__init和__exit宏
如果该模块被编译进内核,而不是动态加载,则宏 __init的使用会在初始化完成后丢弃该函数并收回所占内存。
如果该模块被编译进内核,宏__exit将忽略“清理收尾”的函数。
这些宏在头文件linux/init.h定义,用来释放内核占用的内存。例如启动时看到的信息“Freeing unused kernel memory: 236k freed”,正是内核释放这些函数所占用空间时的打印信息。
内核模块证书和内核模块文档说明
2.4内核后,引入识别代码是否在GPL许可下发布的机制 。在使用非公开的源代码产品时会得到警告。
通过宏MODULE_LICENSE(“GPL”),设置模块遵守GPL证书,取消警告信息。
宏MODULE_DESCRIPTION()用来描述模块的用途。
宏MODULE_AUTHOR()用来声明模块的作者。
宏MODULE_SUPPORTED_DE
您可能关注的文档
- 实验二离散时间信号的频域分析..doc
- 实验二空间信息的数字化采集与处理..doc
- 实验二粘度法测定高聚物的分子量..doc
- 实验二系统分析实验..doc
- 实验二线性系统时域分析..doc
- 实验二组分固液金属相图的测绘..doc
- 实验二组合逻辑电路分析与设计69952..doc
- 实验二细菌蛋白酶的发酵制备..doc
- 实验二绘图及简单科学计算..doc
- 实验二维生素C对布洛芬在家兔体内药物动力学影响..doc
- 2024-2025学年度临床执业医师常考点试卷及答案详解(网校专用).docx
- 2024-2025学年度临床执业医师常考点试卷含完整答案详解【各地真题】.docx
- 跨境文具礼品电商供应链整合优化方案与效果评估.docx
- 2025年珠宝电商直播带货模式行业发展趋势与机遇.docx
- 跨境文具礼品电商供应链整合升级,打造智能物流配送体系研究.docx
- 跨境文具礼品电商供应链整合升级策略报告:2025年政策解读.docx
- 2024-2025学年度临床执业医师常考点试卷及答案详解(全国通用).docx
- 2024-2025学年度临床执业医师常考点试卷及答案详解(必刷).docx
- 校企合作在本科层次职业教育中的作用与实践.docx
- 跨境文具礼品电商供应链整合升级,探索供应链金融创新路径研究.docx
最近下载
- 用人单位劳动合同模板.doc VIP
- 华熙生物-投资价值分析报告:全球最大透明质酸生产商的产业链延伸.pdf VIP
- 20200522-中信证券-华熙生物-688363-投资价值分析报告:研发驱动,服务美好生活.pdf VIP
- 医药生物行业:华熙生物,全球透明质酸领军企业.docx VIP
- 2025年校园监控系统方案(四篇).pdf VIP
- 2025广西公需科目考试答案(3套涵盖95-试题)一区两地一园一通道建设人工智能时代的机遇与挑战.docx VIP
- 华熙生物-投资价值分析报告-透明质酸,供需双振_20200413.pdf VIP
- 2025年校企合作实训项目设计与实施案例报告.docx
- 华熙生物-投资价值分析报告-全球透明质酸龙头,积极延伸医疗美妆终端.pdf VIP
- 重庆市巴蜀初一入学分班语文试卷版.doc VIP
文档评论(0)