中智讯-Linux驱动及应用设计_第1页
中智讯-Linux驱动及应用设计_第2页
中智讯-Linux驱动及应用设计_第3页
中智讯-Linux驱动及应用设计_第4页
中智讯-Linux驱动及应用设计_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中智讯 2013智讯(武汉)科技有限公司 主要议题 10:19 2 设备驱动程序 3 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。 应 用 程 序 驱 动 程 序 设 备 作原理 4 用户进程利用系统调用在对设备文件进行诸如 统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。 编写设备驱动程序的主要工作就是编写子函数,并填充 设备驱动程序特点 5 核心代码 :设备驱动程序是核心的一部分,像核心中其他的代码一样,出错将导致系统的严重损伤。一个编写不当的设备驱动程序甚至能够使系统崩溃导致文件系统的破坏和数据的丢失; 标准接口 :设备驱动程序必须为 核心机制 :设备驱动程序可以使用 标准核心 服务比如内存分配、中断发送和等待对列等; 动态可加载 :多数的 时在不使用设备时进行卸载,这样核心可以有效地利用系统的资源 可配置 : 户可以根据自己的需要进行配置来选择适合自己的驱动 设备驱动的功能 6 对设备初始化和释放 把数据从内核传送到硬件和从硬件读取数据 读取应用程序传送给设备文件的数据和回送应用程序请求的数据 检测和处理设备出现的错误 用户态与内核态 7 种是用户态,另一种是内核态。 内核态有较高的权限,可以控制处理器内存的映射和分配方式,访问外设空间和处理器状态寄存器,控制中断等。 用户态只能运行系统上的应用程序。 驱动程序作为系统内核的一部分,工作在内核态。 通过 针)。 8 网络设备驱动 : SD 制 字符设备驱动 :以字节为单位逐个进行 I/取时不需要占用缓存 块设备驱动 :读写都支持缓存,并且块设备必须能够随机存取,还支持安装文件系统 设备驱动 字符设备驱动 块设备驱动 网络设备驱动 设备文件 9 有的硬件设备都可以作为普通文件一样来看待 可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/ 对用户来说,设备文件与普通文件并无区别 字符设备和块设备是通过文件节点访问的。在 以找到(或者使用 备对应的文件名,称这种文件为设备文件。 主设备号和次设备号 10 主设备号:标识该设备的种类,也标识了该设备所使用的驱动程序 主设备号的范围只能是 1 次设备号:标识使用同一设备驱动程序的不同硬件设备 同一个驱动程序可以管理多个设备,它们依靠次设备号来区别。次设备号只在驱动程序内部使用,系统内核直接把次设备号传递给驱动程序,由驱动程序去管理。 11 弃了对 支持, 们可以在用户空间存取 备模型与 配置设备文件系统 12 在 备文件系统可在配置内核时定制。 嵌入式 以在硬件生产厂家或者 可以根据相近的硬件驱动程序来改写,这样可以加快开发速度。实现一个嵌入式 查看原理图,理解设备的工作原理。一般嵌入式处理器的生产商提供参考电路,也可以根据需要自行设计。 定义设备号。设备由一个主设备号和一个次设备号来标识。主设备号惟一标识了设备类型,即设备驱动程序类型,它是块设备表或字符设备表中设备表项的索引。次设备号仅由设备驱动程序解释,区分被一个设备驱动控制下的某个独立的设备 实现初始化函数。在驱动程序中实现驱动的注册和卸载 设备驱动程序的开发过程 15 设计所要实现的文件操作,定义 实现所需的文件操作调用,如 实现中断服务,并用 断并不是每个设备驱动所必需 编译该驱动程序到内核中,或者用 测试该设备,编写应用程序,对驱动程序进行测试 16 设备打开时的操作 设备关闭时的操作 驱动程序的注册与注销、设备的打开与释放、设备的读写操作、设备的控制操作、设备的中断和轮询处理 一个最简单字符驱动程序,由下面 6个函数和 1个结构体就可组成 17 设备写入时的操作 读取设备时的操作 对文件操作结构体成员定义初始值 设备写入时的操作 18 _删除设备节点,注销设备 文件操作结构体 *(, ( , , ; ( , , ; (, , (, ); ( , (, ); ( ); 19 文件操作函数简介 20 修改文件的读写指针 从设备文件的 开始读出 后增加 * 从设备文件的 后增加 * 向一个硬件设备发命令, 对设备进行控制 文件操作函数简介 21 将设备空间映射到进程地址空间 打开并初始化设备 关闭设备并释放资源 实现内存与设备之间的同步通信 实现内存与设备之间的异步通信 22 ; 99标准初始化结构体 加载模块的一般标准形式为 卸载模块的一般标准形式为 模块的加载和卸载 23 /*初始化设备 */ _ /*卸载设备 */ _ 主要议题 10:19 24 25 头文件和变量声明 26 /*头文件声明 */ # #*定义设备目录 */ /*定义设备节点 */ # #0000 /*定义申请设备号的变量 */ /*定义字符设备的变量 */ 0; /*定义一个 工作很简单,仅仅执行两个函数 这两个函数负责记录(增加或者减少)设备模块被使用的情况,防止当有应用程序使用驱动程序时,此模块被意外地卸载 打开和关闭操作 27 ; ; 设置 28 /*表示 ; 0 0 /*如果 4个 (0 /*判断是否改变 ( if( 5),0); 5),1); /*判断是否改变 ( if( 5),0); 5),1); /*判断是否改变 ( if( 5),0); 5),1); /*判断是否改变 ( if( 5),0); 5),1); 29 _n) 功能: 从内核空间拷贝一块儿数据到用户空间 ; 目标地址,这个地址是用户空间的地址; 源地址,这个地址是内核空间的地址; N : 将要拷贝的数据的字节数 返回值:如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数 _n) 功能:从用户空间拷贝数据到内核空间 目标地址,这个地址是内核空间的地址; 源地址,这个地址是用户空间的地址; 返回者:如果数据拷贝成功,则返回零;否则,返回没有拷贝成功的数据字节数 写入操作 30 if(1) /*向用户空间写数据 ,如果写失败,则返回错误 */ if() 读状态操作 31 /*从用户空间读取数据 ,获取 ()&; 设备控制初始化 32 /*置为输出 */ 5); & ); /*加载设备驱动 */ if( to d/n, /*在 /( /*基于 /( ; l 模块初始化 33 *模块的初始化 */ _ ; if( !/n); ; 模块注销 34 /*模块的退出 */ _ ); /*模块许可证声明,可是使用 者 (; 主要议题 10:19 35 驱动调试 10:19 36 要编写 其进行编译;然后编写测试程序及 其进行调试测试。 设备驱动 0:19 37 /$() o $( $(M=$( *c *p $( ( 测试例程 #“ * fd,i; t; /*打开设备节点 */ _ if(= s n, 38 ) i=0;i4;i+) /依次点亮 t=(1i)&0 t,i); if()!=0) 0xn, ); ; 测试例程 9 = / /$(S = $(D = $(+= $($( $($( $($( $ f $($( p $( ($( 设置工作环境: 部署实验源码:将光盘 /05 第 13 章 /件夹拷贝到/径下; 驱动编译

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论