- 1、本文档共37页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 设备驱动程序开发 驱动激励硬件设备开启, 赋予硬件设备能量 * 本章内容 * 8.1 设备驱动概述 1 8.2 设备驱动程序的开发过程 2 8.3 驱动程序开发的常见问题 3 目的和要求 了解驱动程序的功能 理解驱动程序开发过程 掌握各类设备驱动程序设计方法 掌握驱动程序开发过程中的常见问题 掌握直流电机驱动程序设计实例 * 8.1 设备驱动概述 主要完成以下的功能: (1)对设备初始化和释放; (2)把操作数据从内核传送到硬件和从硬 件读取数据; (3)读取应用程序传送给硬件设备的数据 和回送应用程序请求的数据; (4)检测和处理硬件设备出现的错误。 * 8.1.1 驱动程序和应用程序的区别 设备驱动程序就工作在“内核空间” ;应用程序则是在“用户空间”中运行 。 驱动程序的优先级高于应用程序。 驱动程序可以对硬件进行直接访问和对内存的访问。应用程序则不能。 * 应用程序与驱动程序的关系图 * Linux的设备管理 字符设备(Character Device) 块设备(Block Device) 网络设备驱动(Network interface) * 字符设备 Linux下的字符设备接口支持面向字符的I/O操作,是以字节为单位顺序读写; 字符设备无需缓存且被直接读写 ; 字符设备可以访问/dev目录下的文件系统节点 * 字符设备驱动程序示意图 * 块设备 Linux系统下的块设备是指对信息存取以“块”为单位 ; 块设备对于I/O请求有对应的缓冲区,块设备具有随机访问特性; 块设备和字符设备一样也是通过/dev目录下的文件系统节点被访问的; 块驱动程序除了给内核提供和字符设备驱动程序一样的接口以外,还提供了专门面向块设备的接口 ; 块设备的接口还必须支持挂装(mount)文件系统。 * 块设备驱动程序数据结构示意图 * 网络设备驱动 网络驱动的体系结构包括网络协议接口层、网络设备接口层、网络驱动接口层和设备媒介层。 * 网络驱动的体系结构 * 8.2 设备驱动程序的开发过程 8.2.1 字符设备驱动程序的设计 驱动程序的接口流程图 * Linux为所有的设备文件都提供了统一的操作函数接口,具体操作方法是使用数据结构struct file_operations。 struct file_operations { struct module *owner; loff_t (*llseek) (struct file *, 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 (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); …… }; * 在嵌入式系统的开发中,我们一般仅仅实现其中几个接口函数:read、write、ioctl、open、release,就可以完成应用系统需要的功能。 open接口 Open 接口提供给驱动程序初始化设备的能力,从而为以后的设备操作做好准备。 release接口 与 open函数相反 ; read 和write 接口 read 函数完成将数据从内核拷贝到应用程序空间,write函数则相反,将数据从应用程序空间拷贝到内核。 * ioctl 接口 ioctl 接口主要用于对设备进行读写之外的其他控制。 例:LED驱动程序: S3C2410上的4个LED指示灯由4个I/O端口控制,他们分别是GPF4~GPF7,当GPF4~GPF7分别输出低电平时候,LED指示灯亮,输出高电平的时候,LED指示灯灭 * 1、LED驱动需要的头文件 # include linux/config.h //配置头文件 # include linux/kernel.h //内核
您可能关注的文档
- 工业系统的驱动、测量、建模与控制第3章和第4章.ppt
- 工业系统的驱动、测量、建模与控制第5章和第6章.ppt
- 工业系统的驱动、测量、建模与控制第7章 通用测量仪器.ppt
- 工业系统的驱动、测量、建模与控制第8章 常用元器件(上).ppt
- 工业系统的驱动、测量、建模与控制第8章 常用元器件(下).ppt
- 工业系统的驱动、测量、建模与控制第9章和第10章.ppt
- 工业系统的驱动、测量、建模与控制第13章和第14章.ppt
- 工业系统的驱动、测量、建模与控制第15章和第16章.ppt
- 工业系统的驱动、测量、建模与控制第17章和第18章.ppt
- 工业系统的驱动、测量、建模与控制第19、20、21章.ppt
文档评论(0)