模块编程实验优秀PPT.ppt

上传人:石*** 文档编号:51805385 上传时间:2022-10-20 格式:PPT 页数:26 大小:1.47MB
返回 下载 相关 举报
模块编程实验优秀PPT.ppt_第1页
第1页 / 共26页
模块编程实验优秀PPT.ppt_第2页
第2页 / 共26页
点击查看更多>>
资源描述

《模块编程实验优秀PPT.ppt》由会员分享,可在线阅读,更多相关《模块编程实验优秀PPT.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、模块编程实验模块编程实验模块编程实验模块编程实验 _ 1 _ 1 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第一页,共26页./声明是一个模块声明是一个模块声明是一个模块声明是一个模块././././加载时加载时加载时加载时,初始化模块的编码初始化模块的编码初始化模块的编码初始化模块的编码#include#include#include#include /说说说说明明明明是是是是个个个个内内内内核功能核功能核功能核功能 /read()/read()/read()/read()、ioctl()ioctl()ioctl()ioctl()等函数等函数等函数等函数 .void clean

2、up_module()void cleanup_module()void cleanup_module()void cleanup_module()././././卸载时卸载时卸载时卸载时,注销模块的编码注销模块的编码注销模块的编码注销模块的编码 模块编程实验模块编程实验 _ 2 _ 2 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二页,共26页6.2.2 模块的编译模块的编译#gcc O2 g Wall DMODULE D_KERNEL_c filename.c#gcc O2 g Wall DMODULE D_KERNEL_c filename.c /filename.c/fi

3、lename.c为自己编写的模块程序源代码文件为自己编写的模块程序源代码文件为自己编写的模块程序源代码文件为自己编写的模块程序源代码文件 6.2.3 6.2.3 模块的加载模块的加载模块的加载模块的加载 6.2.4 6.2.4 模块的卸载模块的卸载模块的卸载模块的卸载 6.2.5 6.2.5 模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图 6.2.6 6.2.6 模块程序中管理模块的几个文件操作模块程序中管理模块的几个文件操作模块程序中管理模块的几个文件操作模块程序中管理模块的几个文件操作模块编程实验模块编程实验 _ 3 _ 3 成都信息工程学院成都信

4、息工程学院 徐徐虹虹你现在浏览的是第三页,共26页int(*lseek)(),int(*read)(),int(*wriint(*lseek)(),int(*read)(),int(*write)(),int(*readdir)(),int(*select)(te)(),int(*readdir)(),int(*select)(),),int int(*ioctl)(),int(*ioctl)(),int(*mmap)(),int(*mmap)(),int(*open)(),void(*release)(),(*open)(),void(*release)(),int(*fsync)(),in

5、t(*fasync)(),int(*fsync)(),int(*fasync)(),int(*check_media_change)(),int(*check_media_change)(),int(*revalidate)()int(*revalidate)()模块编程实验模块编程实验 _ 4 _ 4 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第四页,共26页 图图图图6-1 6-1 模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图模块编程实验模块编程实验 _ 5 _ 5 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第五页,共

6、26页 NULL,NULL,NULL,NULL,/modulename_lseek,modulename_lseek,modulename_lseek,modulename_lseek,改改改改变变变变模模模模块结构中的操作位置块结构中的操作位置块结构中的操作位置块结构中的操作位置 modulename_read,modulename_read,modulename_read,modulename_read,modulename_write,modulename_write,modulename_write,modulename_write,NULL,NULL,NULL,NULL,/modul

7、ename_readdir,modulename_readdir,modulename_readdir,modulename_readdir,读取某个子目录中的内容读取某个子目录中的内容读取某个子目录中的内容读取某个子目录中的内容 struct file_operationsstruct file_operationsstruct file_operationsstruct file_operationsmodulename_fops=modulename_fops=modulename_fops=modulename_fops=NULL,NULL,NULL,NULL,/modulename_

8、select,modulename_select,modulename_select,modulename_select,允允允允许许许许应应应应用程序响应来自模块的事件用程序响应来自模块的事件用程序响应来自模块的事件用程序响应来自模块的事件 模块编程实验模块编程实验 _ 6 _ 6 成都信息工程学院成都信息工程学院 徐徐虹虹你现在浏览的是第六页,共26页 NULL,NULL,NULL,NULL,/modulename_ioctl,modulename_ioctl,modulename_ioctl,modulename_ioctl,应应应应用用用用程程程程序通过序通过序通过序通过I/OI/OI

9、/OI/O控制系统的系统调控制系统的系统调控制系统的系统调控制系统的系统调 /用用用用来来来来控控控控制制制制模模模模块行为块行为块行为块行为 NULL,NULL,NULL,NULL,/modulename_mmap,modulename_mmap,modulename_mmap,modulename_mmap,模块地址空间到用户地址空间的映射模块地址空间到用户地址空间的映射模块地址空间到用户地址空间的映射模块地址空间到用户地址空间的映射 modulename_open,modulename_open,modulename_open,modulename_open,modulename_rel

10、ease,modulename_release,modulename_release,modulename_release,NULL,NULL,NULL,NULL,/modulename_fsync,modulename_fsync,modulename_fsync,modulename_fsync,同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态,输输输输模块编程实验模块编程实验 _ 7 _ 7 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第七页,共26页 /出出出出缓缓缓缓冲冲冲冲区区区区里里里里尚尚尚尚未未未未写写写写到

11、磁盘的数据写出去到磁盘的数据写出去到磁盘的数据写出去到磁盘的数据写出去 NULL,NULL,NULL,NULL,/modulename_fasync,modulename_fasync,modulename_fasync,modulename_fasync,改变模块行为改变模块行为改变模块行为改变模块行为 NULL,NULL,NULL,NULL,/modulename_check_media_change,modulename_check_media_change,modulename_check_media_change,modulename_check_media_change,检查自上次

12、操作后检查自上次操作后检查自上次操作后检查自上次操作后,/介介介介质质质质(软软软软盘盘盘盘和和和和CD-ROM)CD-ROM)CD-ROM)CD-ROM)是否更换是否更换是否更换是否更换 NULL NULL NULL NULL /modulename_revalidate,modulename_revalidate,modulename_revalidate,modulename_revalidate,若更换了介质若更换了介质若更换了介质若更换了介质,则更新信息则更新信息则更新信息则更新信息 模块编程实验模块编程实验 _ 8 _ 8 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第

13、八页,共26页6.3 实验内容 6.3.1 编写一个简单的内核模块6.3.2 模块加载前后的比较6.3.3 向模块中再添加一些新函数6.4 实验指导 6.4.1 一个简单的内核模块模块编程实验模块编程实验 _ 9 _ 9 成都信息工程学院成都信息工程学院 徐徐虹虹你现在浏览的是第九页,共26页#include#include#include#include /在在在在内内内内核核核核模模模模块块块块中共享中共享中共享中共享#include /#include /#include /#include /一个模块一个模块一个模块一个模块 /处理处理处理处理CONFIG_MODVERSIONS CO

14、NFIG_MODVERSIONS CONFIG_MODVERSIONS CONFIG_MODVERSIONS#if CONFIG_MODVERSIONS=1#if CONFIG_MODVERSIONS=1#define MODVERSIONS#define MODVERSIONS#include#include#endif#endif#endif#endif int int init_module()init_module()/初初始始化化模模块块 模块编程实验模块编程实验 _ 10 _ 10 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十页,共26页 printk(Hello!

15、printk(Hello!printk(Hello!printk(Hello!This This This This is is is is a a a a testing testing testing testing module!n);module!n);module!n);module!n);return 0;return 0;void void void void cleanup_module()cleanup_module()cleanup_module()cleanup_module()/取取消消init_moduleinit_module()()函数所做的打印功能操作函数所做的

16、打印功能操作函数所做的打印功能操作函数所做的打印功能操作 printk(Sorry!printk(Sorry!printk(Sorry!printk(Sorry!The The The The testing testing testing testing module module module module is unloading now!n);is unloading now!n);is unloading now!n);is unloading now!n);模块编程实验模块编程实验 _ 11 _ 11 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十一页,共26页roo

17、tlinux rootlinux/#/#gcc gcc O2 O2 Wall Wall DMODULE DMODULE D_KERNEL_ D_KERNEL_ c c testmodule.c testmodule.c rootlinux rootlinux/#/#ls ls s s /在在当当前前目目 录录 下下 查查 看看 生生 成成 的的 目目 标标 文文 件件testmodule.o testmodule.o rootlinux rootlinux/#/#insmod insmod f f testmodule.o testmodule.o Hello!This is a testin

18、g module!Hello!This is a testing module!模块编程实验模块编程实验 _ 12 _ 12 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十二页,共26页rootlinux/#rmmod testmodule rootlinux/#rmmod testmodule Sorry!Sorry!The The testing testing module module is is unloading now!unloading now!6.4.2 6.4.2 模块加载前后的比较模块加载前后的比较#include#include /用户空间的标准用户空间的

19、标准I/OI/O出头文件出头文件void GetCr3()void GetCr3()模块编程实验模块编程实验 _ 13 _ 13 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十三页,共26页 int iValue;int iValue;int iValue;int iValue;_ _ _asm_ _asm_ _volatile_ _volatile_ _(movl _(movl%cr3,%0:%cr3,%0:=r(a);=r(a);printf(“the printf(“the printf(“the printf(“the value value value value in

20、 in in in cr3 cr3 cr3 cr3 is:is:is:is:%d”,a);%d”,a);%d”,a);%d”,a);/用户空间的标准输出函数用户空间的标准输出函数 int main()int main()模块编程实验模块编程实验 _ 14 _ 14 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十四页,共26页 GetCr3();GetCr3();return 0;return 0;#include#include int init_module()int init_module()int iValue;int iValue;_ _asm_ _volatile_(_

21、 _asm_ _volatile_(模块编程实验模块编程实验 _ 15 _ 15 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十五页,共26页movl%cr3,%0:=r(iValue);movl%cr3,%0:=r(iValue);printf(cr3:%d,iValue printf(cr3:%d,iValue);return 0;return 0;void cleanup_module(void)void cleanup_module(void)printk(uninstall GetCr3!n printk(uninstall GetCr3!n);模块编程实验模块编程实验

22、 _ 16 _ 16 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十六页,共26页DFLAGS=DFLAGS=D_KERNEL_D_KERNEL_ DMODULEDMODULECFLAGS=CFLAGS=O2 O2 g g Wall Wall Wstrict-Wstrict-prototypes prototypes pipe pipe l/user/include/linux/l/user/include/linux/gcc gcc c c GetCr3.c GetCr3.c$(DFLAGS)$(DFLAGS)$(CFLAGS$(CFLAGS)o GetCr3.oo GetCr

23、3.oclean:clean:rm f*.orm f*.oGetCr3.o:GetCr3.cGetCr3.o:GetCr3.c模块编程实验模块编程实验 _ 17 _ 17 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十七页,共26页rootlinuxserver rootlinuxserver root#root#/sbin/insmod GetCr3.o/sbin/insmod GetCr3.o Cr3:234320012 Cr3:234320012 /这这个个数数值值有有可可能能不一样不一样rootlinuxserver rootlinuxserver root#root#/

24、sbin/rmmod GetCr3/sbin/rmmod GetCr3Uninstall GetCr3!Uninstall GetCr3!模块编程实验模块编程实验 _ 18 _ 18 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十八页,共26页6.4.3 6.4.3 向模块中添加新函数向模块中添加新函数int int open(struct open(struct inode*inode,struct inode*inode,struct file*filp)file*filp)MOD_INC_USE_COUNT;MOD_INC_USE_COUNT;/增加该模块的用户数目增加该模

25、块的用户数目 printk(This printk(This module module is is in in open!n);open!n);return 0;return 0;模块编程实验模块编程实验 _ 19 _ 19 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第十九页,共26页 void void release(struct release(struct inode*inode,struct inode*inode,struct file*filp)file*filp)MOD_DEC_USE_COUNT;MOD_DEC_USE_COUNT;/该该该该模模模模块块块块的

26、的的的用用用用户户户户数数数数目减目减目减目减1 1 printk(This module is in release!n);printk(This module is in release!n);printk(This module is in release!n);printk(This module is in release!n);return 0;return 0;return 0;return 0;#ifdef DEBUG#ifdef DEBUG 模块编程实验模块编程实验 _ 20 _ 20 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十页,共26页 printk(

27、release(%p,%p)n,inode,filp);printk(release(%p,%p)n,inode,filp);printk(release(%p,%p)n,inode,filp);printk(release(%p,%p)n,inode,filp);#endif#endif#endif#endif int int int int read(struct read(struct read(struct read(struct inode*inode,struct inode*inode,struct inode*inode,struct inode*inode,struct fi

28、le*filp,char*buf,int count)file*filp,char*buf,int count)file*filp,char*buf,int count)file*filp,char*buf,int count)int leave;int leave;int leave;int leave;if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)if(ve

29、rify_area(VERIFY_WRITE,buf,count)=DEFAULT)return DEFAULT;return DEFAULT;for(leave=count;leave0;leave-)for(leave=count;leave0;leave-)for(leave=count;leave0;leave-)for(leave=count;leave0;leave-)模块编程实验模块编程实验 _ 21 _ 21 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十一页,共26页 _ _put_user(1,buf,1);_ _put_user(1,buf,1);buf+

30、;buf+;return count;return count;Int Int Int Int write(struct write(struct write(struct write(struct inode*inode,struct inode*inode,struct inode*inode,struct inode*inode,struct file*filp,const char*buf,int count)file*filp,const char*buf,int count)file*filp,const char*buf,int count)file*filp,const cha

31、r*buf,int count)return count;return count;模块编程实验模块编程实验 _ 22 _ 22 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十二页,共26页6.4.4 6.4.4 模块的测试模块的测试#mknod#mknod /dev/moduledev/dev/moduledev c c major major minor minor rootlinux rootlinux/#cat/#cat/proc/modules/proc/modules|awk awk$2=$2=moduledev moduledev print$1print$1模块

32、编程实验模块编程实验 _ 23 _ 23 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十三页,共26页#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include#include main()main()main()main()int i,testmoduledev;int i,testmoduledev;int i,testmoduledev;int i,testmoduledev;char buf

33、10;char buf10;char buf10;char buf10;testmoduledev=open(/dev/moduledev,O_RDWR);testmoduledev=open(/dev/moduledev,O_RDWR);testmoduledev=open(/dev/moduledev,O_RDWR);testmoduledev=open(/dev/moduledev,O_RDWR);if(testmoduledev=if(testmoduledev=if(testmoduledev=if(testmoduledev=1)1)1)1)模块编程实验模块编程实验 _ 24 _

34、24 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十四页,共26页 printf(Cant open the file!n);printf(Cant open the file!n);printf(Cant open the file!n);printf(Cant open the file!n);exit(0);exit(0);read(testmoduledev,buf,10);read(testmoduledev,buf,10);read(testmoduledev,buf,10);read(testmoduledev,buf,10);for(i=0;i10;i+)for

35、(i=0;i10;i+)for(i=0;i10;i+)for(i=0;i10;i+)printf(%dn,bufi);printf(%dn,bufi);printf(%dn,bufi);printf(%dn,bufi);close(testmoduledev);close(testmoduledev);close(testmoduledev);close(testmoduledev);return 0;return 0;模块编程实验模块编程实验 _ 25 _ 25 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十五页,共26页模块编程实验模块编程实验 _ 26 _ 26 成都信息工程学院成都信息工程学院 徐虹徐虹你现在浏览的是第二十六页,共26页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 资格考试

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁