欢迎来到天天文库
浏览记录
ID:48431253
大小:80.02 KB
页数:30页
时间:2019-11-21
《模块驱动实验指导全文.docx》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、内核驱动设计入门一模块方式驱动实验一、实验目的>学习在LINUX卜•进行驱动设计的原理>掌握便用模块方式进行驱动开发调试的过程二、实验内容在PC机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。三、预备知识>有c语言基础。>掌握在Linux下常用编辑器的使用。>掌握Makefile的编写和使用。>掌握LinuxT的程序编译与交叉编译过程。>有驱动开发的基本知识。四、实验设备及工具硬件:PC机Pentiim500以上,硬盘40G以上,内存大于12&4软件:PC机操作系统REUKTL1NUK9.0+M1NICCM+/MH
2、INUX开发环境五、实验原理Linuxrp的驱动设计是陨入式Linux开发中十分重要的部分,它要求开发者不仅要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口关系、考虑系统屮对设备的并发操作等等,而且还要非常熟悉所开发硬件的工作原理。这对驱动开发者提出了比较高的要求,这个实验主要是给大家进入驱动设计提供一个简单入门的一个实例,并不需要提供太多与硬件相关的内容,这部分应该是通过仔细阅读芯片厂家提供的资料来解决。驱动程序的作用是应用程序与硬件之间的一个中间软件层,驱动程序应该为应用程序展现硬件的所有功能,不应该强加其他的约朿,对于硬件使用的权限和限制应该由应用程序层控制
3、o但是有时驱动程序的设计是跟所开发的项目相关的,这时就可能在驱动层加入一些与应用相关的设计考虑,主要是因为在驱动层的效率比应用层高,同时为了项目的需要可能只强化或优化硬件的某个功能,而弱化或关闭其他一些功能;到底需要展现硬件的哪些功能全都由开发者根据需要而定。驱动程序有时会被多个进程同时使用,这时我们要考虑如何处理并发的问题,就需要调用一些内核的函数使用互斥量和锁等机制。驱动程序主要需要考虑下面三个方面:提供尽量多的选项给用户,提高驱动程序的速度和效率,尽量使驱动程序简单,使之易于维护。Linux的驱动开发调试有两种方法,-•种是直接编译到内核,再运行新的内核来测试;二是编
4、译为模块的形式,单独加载运行调试。第一种方法效率较低,但在某些场合是唯一的方法。模块方式调试效率很高,它使用insmodX具将编译的模块直接插入内核,如果岀现故障,可以使用mn»d从内核中卸载模块。不需要重新启动内核,这使驱动调试效率大大提高。我们的实验在PC机和IP^EE^VE41O-S上都可以运行,编译时使用不同的编译器就可以了。1•驱动程序与应用程序的区别应用程序一般有一个main函数,从头到尾执行一个任务;驱动程序却不同,它没有imin函数,通过使用宏moduljnit初始化函数名);将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而
5、完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。驱动程序中有一个宏moudul^xitfB出处理函数名)注册退出处理函数。它在驱动退岀时被调用。应用程序可以和GLIBC库连接,因此可以包含标准的头文件,比如2•内核版本与编译器的版本依赖当模块与内核链接时,insiwd会检查模块和当前内核版本是否匹配,每个模块都定义了版本符nx)dulekerne1versio
6、n,这个符号位于模块文件的ELF头的.rrodinfo段中。只要在模块中包含7、能唯一标识一个设备。主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。比如PC机中的EOE设备,一般主设备号使用3,下进行的分区,一般将主分区的次设备号为1,扩展分区的次设备号为2艮4,逻辑分区使用5.6-..o设备操作宏MXJCR0和MNR『可分别用于获取主次设备号,宏MCDEV0用于将主设备号和次设备号合并为设备号,这些宏定义在includ"inuSd£g.h中。对于LINLX中对设备号的分配原则可以参考Documentation/Hevices.txto对于查看/tev目录下的设备的主次设
7、能唯一标识一个设备。主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。比如PC机中的EOE设备,一般主设备号使用3,下进行的分区,一般将主分区的次设备号为1,扩展分区的次设备号为2艮4,逻辑分区使用5.6-..o设备操作宏MXJCR0和MNR『可分别用于获取主次设备号,宏MCDEV0用于将主设备号和次设备号合并为设备号,这些宏定义在includ"inuSd£g.h中。对于LINLX中对设备号的分配原则可以参考Documentation/Hevices.txto对于查看/tev目录下的设备的主次设
此文档下载收益归作者所有