




已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 1 27 成都信息工程学院 1 第7章模块编程实验 2020 1 27 成都信息工程学院 2 一 实验目的体会用户空间和系统空间 理解操作系统 宏内核 组织方式学习模块操作 加载 卸载 2020 1 27 成都信息工程学院 3 二 模块的组织结构内核模块至少包含两个函数 模块加载函数 init module 作为模块的初始化函数 模块加载时被执行模块卸载函数 cleanup module 作为模块的结束函数 模块卸载时被执行从2 3 13内核开始 也可以为开始和结束函数起任意名称 这可以通过宏module init 和module exit 实现 2020 1 27 成都信息工程学院 4 内核模块包含头文件及宏说明 include它定义了模块的API 类型和宏 MODULE LICENSE MODULE AUTHOR等等 所有的内核模块都必须包含这个头文件 include使用内核信息记录优先级时要包含这个文件 一般在使用printk函数时使用到优先级信息 includemodule init module exit等宏定义 2020 1 27 成都信息工程学院 5 内核模块的代码编写没有外部的函数库可以用 只能使用内核导出的函数如 不能使用printf 而要使用printk printk 并不是设计用来同用户交互的 它实际上是为内核提供日志功能 记录内核信息或用来给出警告 因此 每个printk 声明都会带一个优先级 形如和KERN ALERT那样 内核总共定义了八个优先级的宏 具体可查看文件 usr src linux 2 4 include linux kernel h 2020 1 27 成都信息工程学院 6 三 添加模块 2020 1 27 成都信息工程学院 7 1 最简单的内核模块 hello c include includeintinit module printk Hello Thisisatestingmodule n return0 voidcleanup module printk Sorry Themoduleisunloading n 2020 1 27 成都信息工程学院 8 内核模块在用gcc编译时需要使用特定的参数 gcc Wall DMODULE D KERNEL DLINUX chello c用insmod命令手工加载编译好的模块 insmodhello o如果出现 kernel moduleversionmismatch 错误 修改 编译器版本 usr include linux version h或者内核源代码版本 usr src linux 2 4 include linux version h使两者相同即可如果成功 可以看到屏幕输出信息 同时 可用dmesg命令查看 也可在 var log messages文件中查看到相应输出 2020 1 27 成都信息工程学院 9 用lsmod命令查看加载成功的模块 lsmod所有已经被加载的内核模块都罗列在文件 proc modules中 因此可查看该文件也可得到模块列表用modinfo模块名可查看具体的模块信息用rmmod命令卸载模块 rmmodhello如果成功 输出相应的信息 可用类似的方法查看输出 2020 1 27 成都信息工程学院 10 2 添加内核模块证书 在2 4及更新的内核中 一种识别代码是否在GPL许可下发布的机制被引入 因此在使用非公开的源代码产品时得到警告在前面用insmod加载编译好的模块时 会提示 nolicense 相关信息通过添加以下的宏可以避免MODULE LICENSE 设置在GPL证书下发布代码MODULE DESCRIPTION 描述模块的用途MODULE AUTHOR 用来声明模块的作者MODULE SUPPORTED DEVICE 声明模块支持的设备这种证书机制在头文件linux module h实现 2020 1 27 成都信息工程学院 11 添加证书信息的代码 hello2 c include include include defineDRIVER AUTHOR Teacherzhang defineDRIVER DESC Asampledriver intinit module printk Hello Thisisatestingmodule n return0 voidcleanup module printk Sorry Thetestingmoduleisunloadingnow n MODULE LICENSE GPL MODULE AUTHOR DRIVER AUTHOR MODULE DESCRIPTION DRIVER DESC MODULE SUPPORTED DEVICE testdevice 2020 1 27 成都信息工程学院 12 用modinfo命令查看模块 会得到相关的信息测试的其它过程同前所述 2020 1 27 成都信息工程学院 13 3 改变 开始 和 结束 函数名等 为init module 和cleanup module 函数取任意名字 可以通过宏module init 和module exit 来实现这些宏在头文件linux init h定义需要注意的是函数必须在宏的使用前定义 否则会有编译错误程序例子如下 2020 1 27 成都信息工程学院 14 改变默认函数名的简单模块 hello3 c include include include defineDRIVER AUTHOR Teacherzhang defineDRIVER DESC Asampledriver staticintinit hello3 void printk KERN ALERT Hello Thisisatestingmodule n return0 staticvoidcleanup hello3 printk KERN ALERT Sorry Thetestingmoduleisunloadingnow n module init init hello3 module exit cleanup hello3 MODULE LICENSE GPL MODULE AUTHOR DRIVER AUTHOR MODULE DESCRIPTION DRIVER DESC MODULE SUPPORTED DEVICE testdevice 2020 1 27 成都信息工程学院 15 编译命令 gcc Wall DMODULE D KERNEL DLINUX I usr src linux 2 4 include chello3 c由于每次编译需要输入的选项太多 可以编写makefile文件 内容如下 CC gccMODCFLAGS I usr src lin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 时间的认识课件
- 秩序岗位服务培训
- 时间和方向课件
- 时间与管理课件讲解
- 2025版电梯维保与应急物资储备服务合同范本
- 二零二五年度市政道路建设项目招投标合同范本
- 二零二五年度矿产资源中介服务合同范例
- 2025版高钙石建筑材料原料购销合作框架协议
- 二零二五年度建筑工程设备租赁及保养合同
- 二零二五年度医疗设备生产与销售及售后服务合同
- 2025年新版《食品安全法》知识竞赛试题(附答案)
- 2025至2030中国保护器行业发展趋势分析与未来投资战略咨询研究报告
- 劳动教育主题活动课说课稿
- 2025年电商行业直播带货研究报告:直播电商产业链分析
- 2025年急诊急救三基考试试题(附参考答案)
- 2024年临汾市纪委监委所属事业单位选调真题
- 企业工程管理办法
- 小学生美术国画课件
- 通信工程安全生产操作规范
- 2025年广东省中考数学试卷真题(含答案详解)
- 氢气安全培训课件
评论
0/150
提交评论