linux及linux设备驱动程序设计

linux及linux设备驱动程序设计

ID:11900175

大小:209.50 KB

页数:24页

时间:2018-07-14

linux及linux设备驱动程序设计_第1页
linux及linux设备驱动程序设计_第2页
linux及linux设备驱动程序设计_第3页
linux及linux设备驱动程序设计_第4页
linux及linux设备驱动程序设计_第5页
资源描述:

《linux及linux设备驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、目录正文11.主要功能12.功能模块12.1.字符设备驱动程序的基本数据结构22.1.1.file_operations结构22.1.2.inode结构32.1.3.file结构32.2.字符设备驱动程序的初始化和清除函数42.2.1.初始化函数scull_init()的实现42.2.2.清除函数scull_exit()的实现42.3.字符设备驱动程序的入口点52.3.1.open()操作的实现52.3.2.release()操作的实现62.3.3.read()操作的实现62.3.4.write()操作的实现62.

2、3.5.llseek()操作的实现72.4.设备驱动程序的编译、装卸和卸载7设备驱动程序的编译方式72.4.1.设备驱动模块的编译72.4.2.设备驱动模块的装载82.4.3.设备驱动模块的卸载93.程序流程图104.程序调试114.1.用vi编辑器编写程序114.2.头文件无法找到124.3.程序运行结果135.总结136.附录:14221.主要功能因为Linux系统将所有的外围设备都高度抽象成一些字节序列,并且以文件形式来表示这些设备。所以Linux设备驱动程序被集成在内核中,构成了处理或操作硬件控制器的软件模

3、块。在实际处理中,将驱动程序作为常驻内存的低级硬件处理程序共享库,设备驱动程序形成了对设备的抽象处理。也就是说,设备驱动程序是内核中具有高特权级的、常驻内存的、可共享的下层硬件处理例程。我们知道,仅仅瘵物理设备与计算机系统简单相连,并不能使外部设备为用户提供各种所需要的操作,在系统中还须为各种设备配备相应的动作程序。除了CPU、内存和少数几个设备外,在程序执行中几乎所有的系统操作最终都要映射到一个物理设备上,对设备的控制操作通常由该设备的特殊可执行代码实现,这些代码就是设备驱动程序。通俗地讲,驱动程序是用来控制计算

4、机外围设备的程序。Linux设备驱动程序中包含了如何控制这些设备的技术细节,并通过特定的接口导出一个规范的操作集合,内核模块使用规范的设备接口(即字符设备接口和块设备接口),通过文件系统接口把设备操作导出到用户程序中。2.功能模块设备驱动程序是一些函数和数据结构的集合,这些函数和数据结构是用于实现管理设备的一个简单接口。操作系统内核使用这个接口来请求驱动程序对设备进行I/O操作,甚至,我们可以把设备驱动程序看成一个抽象数据模型,它为计算机中的每个硬件设备都建立了一个通用函数接口。由于一个设备驱动程序就是一个模块,所

5、以在内核内部用一个file结构来识别设备驱动程序,而且内核使用file_operations结构来访问设备驱动程序,需要理解代码的如下几个部分:●驱动程序的注册与注销。●设备的打开与释放。●设备的读写操作。●设备的控制操作。●设备的中断和轮询处理。22根据几个部分的代码的划分将设备驱动程序模块划分成几个模块:如图2-1所示。图2-1程序模块划分图2.1.字符设备驱动程序的基本数据结构2.1.1.file_operations结构在linux系统中,设备驱动程序所提供的一组入口点用一个结构向系统进行说明,此结构定义为

6、:#includestructfile_operations{loff_t(*llseek)(structflie*,loff_t.,int);ssize_t(*read)(structfile*,char*,size_t,loff_t*);ssize_t(*write)(structfile*,constchar*,size_t,loff_t*);int(*ioct)(structinode*,structfile*,unsignedint,unsignedint,unsignedlong

7、);int(*open)(structinode*,structfile*);int(*release)(structinode*,structfile*);};这里只列出scull代码中实现的一些字段,事实上,该结构的规模随着Linux内核的更新将会不断扩大。这个结构中的每一个成员名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是Linux设备驱动程序的

8、基本工作原理。既然是这样,编写设备驱动程序的主要工作就是编写这些子函数,并填充file_operations的各个域。22接下来谈谈file_operations结构的实例化问题。随着内核不断增加新的功能,file_operations结构已逐渐变得越来越强大。新增加的操作自然会给设备驱动程序带来移植性问题。每个驱动程序中该结构的实例都是用标准的C语法声明的

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

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

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