模块编程实验优秀课件.ppt

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

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

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

2、odule()void cleanup_module()void cleanup_module()void cleanup_module()././././卸载时卸载时卸载时卸载时,注销模块的编码注销模块的编码注销模块的编码注销模块的编码 模块编程实验模块编程实验 _ 2 _ 2 成都信息工程学院成都信息工程学院 徐虹徐虹第2页,本讲稿共26页6.2.2 6.2.2 模块的编译模块的编译模块的编译模块的编译#gcc O2 g Wall DMODULE D_KERNEL_c filename.c#gcc O2 g Wall DMODULE D_KERNEL_c filename.c /filen

3、ame.c/filename.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、息工程学院成都信息工程学院 徐虹徐虹第3页,本讲稿共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)(

5、),int(*fasync)(),int(*fsync)(),int(*fasync)(),int(*check_media_change)(),int(*check_media_change)(),int(*revalidate)()int(*revalidate)()模块编程实验模块编程实验 _ 4 _ 4 成都信息工程学院成都信息工程学院 徐虹徐虹第4页,本讲稿共26页 图图图图6-1 6-1 模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图模块链接到内核的示意图模块编程实验模块编程实验 _ 5 _ 5 成都信息工程学院成都信息工程学院 徐虹徐虹第5页,本讲稿共26页

6、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,/modulenam

7、e_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_sele

8、ct,modulename_select,modulename_select,modulename_select,允允允允许许许许应应应应用用用用程序响应来自模块的事件程序响应来自模块的事件程序响应来自模块的事件程序响应来自模块的事件 模块编程实验模块编程实验 _ 6 _ 6 成都信息工程学院成都信息工程学院 徐徐虹虹第6页,本讲稿共26页 NULL,NULL,NULL,NULL,/modulename_ioctl,modulename_ioctl,modulename_ioctl,modulename_ioctl,应应应应用用用用程程程程序序序序通通通通过过过过I/OI/OI/OI/O控制系

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

10、ulename_release,modulename_release,modulename_release,NULL,NULL,NULL,NULL,/modulename_fsync,modulename_fsync,modulename_fsync,modulename_fsync,同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态同步内存与磁盘上的数据状态,输输输输模块编程实验模块编程实验 _ 7 _ 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 成都信息工程学院成都信息工程学院 徐虹徐虹第8页,本讲稿共26页6.3 实验内容

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

14、FIG_MODVERSIONS CONFIG_MODVERSIONS#if CONFIG_MODVERSIONS=1#if CONFIG_MODVERSIONS=1#if CONFIG_MODVERSIONS=1#if CONFIG_MODVERSIONS=1#define MODVERSIONS#define MODVERSIONS#define MODVERSIONS#define MODVERSIONS#include#include#include#include#endif#endif#endif#endif int init_module()/int init_module()/i

15、nt init_module()/int init_module()/初始化模块初始化模块初始化模块初始化模块 模块编程实验模块编程实验 _ 10 _ 10 成都信息工程学院成都信息工程学院 徐虹徐虹第10页,本讲稿共26页 printk(Hello!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;retur

16、n 0;return 0;void void void void cleanup_module()cleanup_module()cleanup_module()cleanup_module()/取取取取消消消消init_moduleinit_moduleinit_moduleinit_module()()()()函数所做的打印功能操作函数所做的打印功能操作函数所做的打印功能操作函数所做的打印功能操作 printk(Sorry!printk(Sorry!printk(Sorry!printk(Sorry!The The The The testing testing testing testi

17、ng module module module module is is is is unloading now!n);unloading now!n);unloading now!n);unloading now!n);模块编程实验模块编程实验 _ 11 _ 11 成都信息工程学院成都信息工程学院 徐虹徐虹第11页,本讲稿共26页rootlinux rootlinux/#/#gcc gcc O2 O2 Wall Wall DMODULE DMODULE D_KERNEL_ D_KERNEL_ c c testmodule.c testmodule.c rootlinux rootlinux/

18、#/#ls ls s s /在在当当前前目目 录录 下下 查查 看看 生生 成成 的的 目目 标标 文文 件件testmodule.o testmodule.o rootlinux rootlinux/#/#insmod insmod f f testmodule.o testmodule.o Hello!This is a testing module!Hello!This is a testing module!模块编程实验模块编程实验 _ 12 _ 12 成都信息工程学院成都信息工程学院 徐虹徐虹第12页,本讲稿共26页rootlinux/#rmmod testmodule rootli

19、nux/#rmmod testmodule Sorry!Sorry!The The testing testing module module is is unloading now!unloading now!6.4.2 6.4.2 模块加载前后的比较模块加载前后的比较#include#include /用户空间的标准用户空间的标准I/OI/O出头文件出头文件void GetCr3()void GetCr3()模块编程实验模块编程实验 _ 13 _ 13 成都信息工程学院成都信息工程学院 徐虹徐虹第13页,本讲稿共26页 int iValue;int iValue;int iValue;in

20、t iValue;_ _ _ _ _asm_ _asm_ _asm_ _asm_ _volatile_ _volatile_ _volatile_ _volatile_ _(movl _(movl _(movl _(movl%cr3,%0:%cr3,%0:%cr3,%0:%cr3,%0:=r=r=r=r(a);(a);(a);(a);printf(“the printf(“the printf(“the printf(“the value value value value in in in in cr3 cr3 cr3 cr3 is:is:is:is:%d”,a);%d”,a);%d”,a)

21、;%d”,a);/用户空间的标准输出函数用户空间的标准输出函数用户空间的标准输出函数用户空间的标准输出函数 int main()int main()int main()int main()模块编程实验模块编程实验 _ 14 _ 14 成都信息工程学院成都信息工程学院 徐虹徐虹第14页,本讲稿共26页 GetCr3();GetCr3();return 0;return 0;#include#include int init_module()int init_module()int iValue;int iValue;_ _asm_ _volatile_(_ _asm_ _volatile_(模块

22、编程实验模块编程实验 _ 15 _ 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);模块编程实验模块编程实验 _ 16 _ 16 成都信息工程学院成都信息工

23、程学院 徐虹徐虹第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 GetCr3.oclean:clean:rm f*.orm f*.

24、oGetCr3.o:GetCr3.cGetCr3.o:GetCr3.c模块编程实验模块编程实验 _ 17 _ 17 成都信息工程学院成都信息工程学院 徐虹徐虹第17页,本讲稿共26页rootlinuxserver rootlinuxserver root#root#/sbin/insmod GetCr3.o/sbin/insmod GetCr3.o Cr3:234320012 Cr3:234320012 /这这个个数数值值有有可可能能不一样不一样rootlinuxserver rootlinuxserver root#root#/sbin/rmmod GetCr3/sbin/rmmod Get

25、Cr3Uninstall GetCr3!Uninstall GetCr3!模块编程实验模块编程实验 _ 18 _ 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;/增加该模块的用户数目增加该模块的用户数目 printk(This printk(This modul

26、e module is is in in open!n);open!n);return 0;return 0;模块编程实验模块编程实验 _ 19 _ 19 成都信息工程学院成都信息工程学院 徐虹徐虹第19页,本讲稿共26页 void void void void release(struct release(struct release(struct release(struct inode*inode,struct inode*inode,struct inode*inode,struct inode*inode,struct file*filp)file*filp)file*filp)fi

27、le*filp)MOD_DEC_USE_COUNT;/MOD_DEC_USE_COUNT;/MOD_DEC_USE_COUNT;/MOD_DEC_USE_COUNT;/该模块的用户数目减该模块的用户数目减该模块的用户数目减该模块的用户数目减1 1 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;r

28、eturn 0;#ifdef DEBUG#ifdef DEBUG#ifdef DEBUG#ifdef DEBUG 模块编程实验模块编程实验 _ 20 _ 20 成都信息工程学院成都信息工程学院 徐虹徐虹第20页,本讲稿共26页 printk(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(

29、struct read(struct read(struct read(struct inode*inode,struct inode*inode,struct inode*inode,struct inode*inode,struct file*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_WRI

30、TE,buf,count)=DEFAULT)if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)if(verify_area(VERIFY_WRITE,buf,count)=DEFAULT)return DEFAULT;return DEFAULT;return DEFAULT;return DEFAULT;for(leave=count;leave0;leave-)for(leave=count;leave0;leave-)for(leave=count;l

31、eave0;leave-)for(leave=count;leave0;leave-)模块编程实验模块编程实验 _ 21 _ 21 成都信息工程学院成都信息工程学院 徐虹徐虹第21页,本讲稿共26页 _ _put_user(1,buf,1);_ _put_user(1,buf,1);_ _put_user(1,buf,1);_ _put_user(1,buf,1);buf+;buf+;buf+;buf+;return count;return count;return count;return count;Int Int Int Int write(struct write(struct wr

32、ite(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 char*buf,int count)return count;return count;return count;return count;模块编程实验模块

33、编程实验 _ 22 _ 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模块编程实验模块编程实验 _ 23 _ 23 成都信息工程学院成都信息工程学院 徐虹徐虹第23页,本讲稿共26页#

34、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 buf10;char buf10;char buf10;char buf10;testmoduledev=open(/dev/

35、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 _ 24 成都信息工程学院成都信息工程学院 徐虹徐虹第24页,本讲稿共26页 printf(Cant open the fi

36、le!n);printf(Cant open the file!n);printf(Cant open the file!n);printf(Cant open the file!n);exit(0);exit(0);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(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;return 0;return 0;模块编程实验模块编程实验 _ 25 _ 25 成都信息工程学院成都信息工程学院 徐虹徐虹第25页,本讲稿共26页模块编程实验模块编程实验 _ 26 _ 26 成都信息工程学院成都信息工程学院 徐虹徐虹第26页,本讲稿共26页

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

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

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

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