实验五基于led驱动的动态模块加载测试

实验五基于led驱动的动态模块加载测试

ID:24170904

大小:76.00 KB

页数:4页

时间:2018-11-13

实验五基于led驱动的动态模块加载测试_第1页
实验五基于led驱动的动态模块加载测试_第2页
实验五基于led驱动的动态模块加载测试_第3页
实验五基于led驱动的动态模块加载测试_第4页
资源描述:

《实验五基于led驱动的动态模块加载测试》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、实验五基于led驱动的动态模块加载测试实验目的:通过本实验掌掘驱动程序动态加载的原理以及动态加载的步骤,另外掌握ARM开发板烧写的内容及步骤。实验设备:1、女装vmware8.0及unbuntulO.10的计算机2、TQ2440开发板3、串口线4、USB线实验原理:1、驱动动态加载原理:Linux则是单块结构的操作系统。微内核结构nf方便地在系统中添加新的组件,而单块结构却不容幼做到这一/X。为此,Linux系统使用川‘动态加载和卸载的内核模块(LoadableKernelModules,LKMs),可方使地在闪核中添加新的组件或卸载不

2、再需要的内核组件。Linux使川insmod来显式加载内核模块,使川rmmod来卸载榄块。同吋内核白分也可以诘求内核f台进程kerneld来加载与卸载模块。Linux模块人多数是设备驱动程序以及伪设备驱动程序模块,如网络设备和文件系统等。动态可加载代码的优点是可以让内核保持很小的尺寸并非常灵活。模块机制可以无需重构内核并频繁重新启动来尝试运行新A核代码。用户可以根裾£1己系统的需要构筑£1己的私有内核。Linux源码的公开更足为改造其内核、重建有特殊要求的操作系统提供了可能。模块必须能够找到其需要使用的内核资源。例如模块需要分配内存吋,

3、要调用内核的内存分配例程kmalloc()。但在构造:模块时并不知道kmalloc()在内存中何处,这样闪核必须夜使用这些模块前修改模块中对kmallocO的引用地址。内核在其内核符号表中维护着一个内核资源链表这样当加载模块吋它能够解析出模块中对N核资源的引用。Linux还允许存在模块堆栈,它在模块之间相互调用吋使用。例如,1大1为VFAT(VirtuaIFileAllocationTable)文件系统是从FAT(FileAllocationTable)文件系统中扩展Ifir米,VFAT文件系统模块可能耑要FAT文件系统模块的服务。某个

4、模块对其他模块的服务或资源的需求类似于模块对内核本身资源或服务的请求。不过此时所诺求的服务足来自另外一个事先己加载的模块。当加载模块吋,lAj核就把新近加载模块输出的所有资源和符号添加到lAj核符号表(Kernel-Symbol-Tabic)中。在/proc/ksyms.里血的毎一个表项代表着一个公共的内核符号,这就是内核符号表。这些内核符号是可以被LKM引用的。LKM中所存取的每一个符号(像函数名)也会被列在这个文件里而。在该文件中可以看到LKM到欣对以调用那些函数。当试阁卸载某个模块吋,A核需要知道此模块足否己经没有被使用,同吋它需

5、要有种方法来通知此将卸载模块。模块必须能够在从内核种删除之前释放其分配的所奋系统资源,如内核内存或中断。当模块被卸载吋,内核将从内核符号表中删除所有与之对应的符号。有两种方法可用來加载模块:(1)利用insmod命令手工将模块插入内核;(2)凼内核在必要吋加载校块,称为“需求加载”。2、动态加载的步骤原理Linux的模块可以用C语言编写,用gcc编译成鬥标文件(不进行链接,作为文件存在),为此需要在gcc命令行里加上-c的参数。在编译时,还应该在gcc的命令行里加上这样的参数:-D_KERNEL_-DMODULEo曲于在不链接时,gcc

6、只允许一个输入文件,因此一个模块的所有部分都必须在一个文件里实现。編译好的模块*.o放/lib/modules/xxxx/misc卜‘(xxxx表示核心版木,如在核心版木为2.0.30吋应该力/lib/modules/2.0.30/misc),然£;•川depmod-a使此模块成力可加载模块。模块用insmod命令加载,用rmmod命令来卸载,并N*以用Ismod命令来查看所有已加载的模块的状态。利川insmod命令川'手工装入内核模块;利川IsmodnJ"查肴当前装入的内核模块以及需求加载模块的使用计数及标志信息;利用rmmod则可以

7、卸载指定的模块。編写模块程序的吋候,必须提供两个闲数,一个足intinit_module(void),供insmod在加载此模块的吋候A动调用,负责进行设备驱动程序的初始化工作。inilmodule返回0以丧示初始化成功,返回货数丧示失败。:W—个函数是voidcleanw_module(void),介:模抉被卸载吋调川,负责进行设备驱动程序的淸除工作。在成功的向系统注册了设备驱动程序后(调用register_chrdev成功后),就可以用mknod命令来把设备映射为一个特别文件,艽它程序使用这个设备的时候,只要对此特别文件进行操作就行

8、了。实验步骤:(一)、驱动模块动态加载1.找到驱动程序EmbedSky_gpio.c的位置:通常在:闪核代码/drivers/charh果下root(acj-virtual-machine:/opt/Emb

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。