Linux及Linux设备驱动程序设计.docVIP

  • 11
  • 0
  • 约1.61万字
  • 约 24页
  • 2018-01-08 发布于江西
  • 举报
Linux及Linux设备驱动程序设计.doc

目 录 正文 1 1. 主要功能 1 2. 功能模块 1 2.1. 字符设备驱动程序的基本数据结构 2 2.1.1. file_operations结构 2 2.1.2. inode结构 3 2.1.3. file结构 3 2.2. 字符设备驱动程序的初始化和清除函数 4 2.2.1. 初始化函数scull_init( )的实现 4 2.2.2. 清除函数scull_exit( )的实现 4 2.3. 字符设备驱动程序的入口点 5 2.3.1. open( )操作的实现 5 2.3.2. release( )操作的实现 6 2.3.3. read( )操作的实现 6 2.3.4. write( )操作的实现 6 2.3.5. llseek( )操作的实现 7 2.4. 设备驱动程序的编译、装卸和卸载 7 设备驱动程序的编译方式 7 2.4.1. 设备驱动模块的编译 7 2.4.2. 设备驱动模块的装载 8 2.4.3. 设备驱动模块的卸载 9 3. 程序流程图 10 4. 程序调试 11 4.1. 用vi编辑器编写程序 11 4.2. 头文件无法找到 12 4.3. 程序运行结果 13 5. 总结 13 6. 附录: 14 1.主要功能 因为Linux系统将所有的外围设备都高度抽象成一些字节序列,并且以文件形式来表示这些设备。所以Linux设备驱动程序被集成在内核中,构成了处理或操作硬件控制器的软件模块。在实际处理中,将驱动程序作为常驻内存的低级硬件处理程序共享库,设备驱动程序形成了对设备的抽象处理。也就是说,设备驱动程序是内核中具有高特权级的、常驻内存的、可共享的下层硬件处理例程。 我们知道,仅仅瘵物理设备与计算机系统简单相连,并不能使外部设备为用户提供各种所需要的操作,在系统中还须为各种设备配备相应的动作程序。除了CPU、内存和少数几个设备外,在程序执行中几乎所有的系统操作最终都要映射到一个物理设备上,对设备的控制操作通常由该设备的特殊可执行代码实现,这些代码就是设备驱动程序。通俗地讲,驱动程序是用来控制计算机外围设备的程序。 Linux设备驱动程序中包含了如何控制这些设备的技术细节,并通过特定的接口导出一个规范的操作集合,内核模块使用规范的设备接口(即字符设备接口和块设备接口),通过文件系统接口把设备操作导出到用户程序中。 2.功能模块 设备驱动程序是一些函数和数据结构的集合,这些函数和数据结构是用于实现管理设备的一个简单接口。操作系统内核使用这个接口来请求驱动程序对设备进行I/O操作,甚至,我们可以把设备驱动程序看成一个抽象数据模型,它为计算机中的每个硬件设备都建立了一个通用函数接口。由于一个设备驱动程序就是一个模块,所以在内核内部用一个file结构来识别设备驱动程序,而且内核使用file_operations结构来访问设备驱动程序,需要理解代码的如下几个部分: 驱动程序的注册与注销。 设备的打开与释放。 设备的读写操作。 设备的控制操作。 设备的中断和轮询处理。 根据几个部分的代码的划分将设备驱动程序模块划分成几个模块:如图2-1所示。 图2-1 程序模块划分图 2.1. 字符设备驱动程序的基本数据结构 2.1.1. file_operations结构 在linux系统中,设备驱动程序所提供的一组入口点用一个结构向系统进行说明,此结构定义为: #includelinux/fs.h struct file_operations{ loff_t (*llseek)(struct flie*,loff_t.,int); ssize_t (*read)(struct file*,char*,size_t,loff_t*); ssize_t (*write)(struct file*,const char*,size_t,loff_t*); int (*ioct)(struct inode*,struct file*,unsigned int,unsigned int,unsigned long); int (*open)(struct inode*,struct file*); int (*release)(struct inode*,struct file*); }; 这里只列出scull代码中实现的一些字段,事实上,该结构的规模随着Linux内核的更新将会不断扩大。 这个结构中的每一个成员名字都对应着一个系统调用。用户进程利用系统调用在对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。这是Linux设备驱动程序的基本工作原理。既然是这样,编写设备驱动程序的主要工作

文档评论(0)

1亿VIP精品文档

相关文档