嵌入式系统原理与技术课件:第8章 设备驱动(初稿).pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《嵌入式系统原理与技术课件:第8章 设备驱动(初稿).pptx》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式系统原理与技术课件:第8章 设备驱动初稿 嵌入式 系统 原理 技术 课件 设备 驱动 初稿
- 资源描述:
-
1、1、Linux驱动程序简介2、设备驱动程序结构3、Linux内核设备模型4、同步机制5、内存映射和管理6、工作队列7、异步I/O8、DMA设备驱动程序是操作系统内核和机器硬件之间的接口设备驱动程序为应用程序屏蔽了硬件的细节,在应用程序看来,硬件设备只是一个设备文件, 应用程序可以像操作普通文件一样对硬件设备进行操作设备驱动程序是内核的一部分,它完成以下的功能: (1)对设备的初始化和释放。 (2)把数据从内核传送到硬件和从硬件读取数据到内核。 (3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据。这需要在用户空间,内核空间,总线以及外设之间传输数据。 (4)检测和处理设备出现的错误。
2、设备的设备的分类分类 字符设备 无需缓冲直接读写的设备,如系统的串口设备/dev/cua0和/dev/cua1 块设备 以块为单位进行读写,典型的块大小为512或1024字节;块设备的存取是通过buffer、cache来进行并且可以随机访问,即不管块位于设备中何处都可以对其进行读写 网络设备 通过BSD套接口访问设备文件 Linux抽象了对硬件的处理,所有的硬件设备都可以作为普通文件一样来看待:它们可以使用和操作文件相同的、标准的系统调用接口来完成打开、关闭、读写和I/O控制操作,而驱动程序的主要任务也就是要实现这些系统调用函数 Linux为文件和设备提供了一致的用户接口。对用户来说,设备文件
3、与普通文件并无区别主设备号和次设备号 主设备号 标识该设备的种类,也标识了该设备所使用的驱动程序 次设备号 标识使用同一设备驱动程序的不同硬件设备 Linux设备驱动代码的分布 所有Linux的设备驱动源码都放在drivers目录中,分成以下几类: block:块设备驱动包括IDE(在ide.c中)驱动。块设备包括IDE与SCSI设备。 char:包含字符设备的驱动,如ttys、串行口以及鼠标 等等 Linux设备驱动程序的特点 (1)内核代码 (2)内核接口 (3)内核机制与服务 (4)可加载 (5)可配置 (6)动态性2、设备驱动程序结构Linux的设备驱动程序与外界的接口可以分成三部分:
4、 (1)驱动程序与操作系统内核的接口 (2)驱动程序与系统引导的接口 (3)驱动程序与设备的接口设备驱动程序结构驱动程序的注册与注销 向系统增加一个驱动程序意味着要赋予它一个主设备号,这可以通过在驱动程序的初始化过程中调用定义在fs/devices.c中的register_chrdev()函数或者fs/block_dev.c中的register_blkdev()函数来完成。而在关闭字符设备或者块设备时,则需要通过调用unregister_chrdev()或unregister_blkdev()函数从内核中注销设备,同时释放占用的主设备号。设备驱动程序结构设备的打开与释放 打开设备是通过调用定义
5、在include/linux/fs.h中的file_operations结构中的函数open()来完成 释放设备是通过调用file_operations结构中的函数release()来完成设备驱动程序结构设备的读写操作 字符设备的读写操作相对比较简单,直接使用函数read()和write()就可以了 块设备的话,则需要调用函数block_read()和block_write()来进行数据读写设备驱动程序结构设备的控制操作 通过设备驱动程序中的函数ioctl()来完成设备驱动程序结构设备的轮询和中断处理 设备执行某个命令时,如“将读取磁头移动到软盘的第42扇区上”,设备驱动可以从轮询方式和中断方
6、式中选择一种以判断设备是否已经完成此命令。 不支持中断的硬件设备,读写时需要轮流查询设备状态内核设备模型是Linux 2.6之后引进的,是为了适应系统拓扑结构越来越复杂,对电源管理、热插拔支持要求越来越高等形势下开发的全新的设备模型。它采用sysfs文件系统,一个类似于/proc文件系统的特殊文件系统,作用是将系统中的设备组织成层次结构,然后向用户程序提供内核数据结构信息。设备模型建立的目的 代码重复最小; 提供如引用计数这样的统一机制; 例举系统中所有设备,观察其状态,查看其连接总线; 用树的形式将全部设备结构完整、有效地展现,包括所有总线和内部连接; 将设备和对应驱动联系起来; 将设备按照
7、类型分类; 从树的叶子向根的方向依次遍历,确保以正确顺序关闭各个设备的电源sysfs设备拓扑结构的文件系统表现/sys/sys|- block|- block|- bus|- bus|- class|- class|- |- devdev|- devices|- devices|- firmware|- firmware|- |- fsfs|- kernel|- kernel|- module|- module- power- powersysfs根目录下有10个目录,分别是:block,bus,class,dev,devices,firmware,fs,kernel,module和power
8、 Block目录:其下的每个子目录分别对应系统中的一个块设备,每个目录又都包含该块设备的所有分区; class目录:包含以高层功能逻辑组织起来的系统设备视图; 等等驱动模型和sysfs Linux2.6设备驱动模型的基本元素是设备类结构classes、总线结构bus、设备结构devices、驱动结构drivers Linux统一设备模型的基本结构类型说明对应内核数据结构对应/sys项总线类型(Bus Types)系统中用于连接设备的总线struct bus_type/sys/bus/*/设备(Devices)内核识别的所有设备,依照连接它们的总线进行组织struct device/sys/de
9、vices/*/*/./设 备 类 别 ( D e v i c e Classes)系 统 中 设 备 的 类 型(声卡,网卡,显卡,输入设备等),同一类中包含的设备可能连接不同的总线struct class/sys/class/*/设 备 驱 动 ( D e v i c e Drivers)在一个系统中安装多个相同设备,只需要一份驱动程序的支持struct device_driver/sys/bus/pic/drivers/*/Kobject:kobject的主要功能之一是提供一个统一的计数系统。由于kobject是“基”对象,其他对象,如device,bus,class,device_dr
10、iver等容器都会将其包含,其他对象的引用计数继承或封装kobject的引用计数就可以了。structstruct kobjectkobject constconst char char * *name;/name;/* *短名字短名字* */ /structstruct kobjectkobject * *parent;/parent;/* *表示对象的层次关系表示对象的层次关系* */ /structstruct sysfs_direntsysfs_dirent * *sdsd;/;/* *表示表示sysfssysfs中的一个目中的一个目录项录项* */ / ;结构体kref:深入到引用计
展开阅读全文