嵌入式软件开发导论-7设备驱动程序开发

上传人:豆浆 文档编号:48553630 上传时间:2018-07-17 格式:PPT 页数:81 大小:1.95MB
返回 下载 相关 举报
嵌入式软件开发导论-7设备驱动程序开发_第1页
第1页 / 共81页
嵌入式软件开发导论-7设备驱动程序开发_第2页
第2页 / 共81页
嵌入式软件开发导论-7设备驱动程序开发_第3页
第3页 / 共81页
嵌入式软件开发导论-7设备驱动程序开发_第4页
第4页 / 共81页
嵌入式软件开发导论-7设备驱动程序开发_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《嵌入式软件开发导论-7设备驱动程序开发》由会员分享,可在线阅读,更多相关《嵌入式软件开发导论-7设备驱动程序开发(81页珍藏版)》请在金锄头文库上搜索。

1、嵌入式软件开发导论嵌入式软件开发导论同济大学软件学院同济大学软件学院200620067. 7. 设备驱动程序开发设备驱动程序开发主要内容主要内容l l概述概述l l流驱动接口流驱动接口l l设备驱动程序架构设备驱动程序架构l lUSB mouse USB mouse 驱动开发示例驱动开发示例l lWindows CE Windows CE 系统服务系统服务什么是设备驱动程序什么是设备驱动程序设备驱动程序是与硬件设备进行通信的系统设备驱动程序是与硬件设备进行通信的系统 程序。一个设备可以是物理设备,也可以是程序。一个设备可以是物理设备,也可以是 一个逻辑实体。通常,这些实体需要操作系一个逻辑实体

2、。通常,这些实体需要操作系 统对其进行控制,资源管理。设备驱动程序统对其进行控制,资源管理。设备驱动程序 就是管理这些物理设备或者虚拟设备,协议就是管理这些物理设备或者虚拟设备,协议 或者系统服务的软件模块。或者系统服务的软件模块。 对于每一个基于对于每一个基于 Windows CEWindows CE的设备,设备驱动程序都是必的设备,设备驱动程序都是必 不可少。不可少。 - -译自译自 MSDNMSDN“ “一般一般” ”驱动程序开发的理解驱动程序开发的理解l l必须使用汇编语言对端口进行读写必须使用汇编语言对端口进行读写l l设备驱动程序是操作系统的一部分,难于设备驱动程序是操作系统的一部

3、分,难于 开发与调试。开发与调试。l l设备驱动程序控制硬件设备驱动程序控制硬件l l中断比较难于处理中断比较难于处理必须使用汇编语言读写端口必须使用汇编语言读写端口l lCEDDK.dll CEDDK.dll 提供提供 APIs APIs与硬件进行通信与硬件进行通信HalGetBusDataHalGetBusDataREAD_PORT_UCHARREAD_PORT_UCHARWRITE_REGISTER_ULONGWRITE_REGISTER_ULONGl l对于逻辑设备驱动程序,采用对于逻辑设备驱动程序,采用Win32 APIs Win32 APIs 从硬件获取数据从硬件获取数据设备驱动程

4、序是操作系统的一设备驱动程序是操作系统的一 部分,难于开发与调试部分,难于开发与调试l l对于对于UNIXUNIX或者是或者是 Windows 9x, Windows 9x,设备驱动程设备驱动程 序是与操作系统映像连接的,并运行于系序是与操作系统映像连接的,并运行于系 统内核态。统内核态。l l对于对于windows CE,windows CE,大多数的设备驱动程序大多数的设备驱动程序 运行于用户态,简单的来说就是一个运行于用户态,简单的来说就是一个DLLDLL 文件。文件。设备驱动程序控制硬件设备驱动程序控制硬件l l大多数的设备驱动程序用来控制硬件。大多数的设备驱动程序用来控制硬件。l l

5、对于某些硬件,是没有驱动的。对于某些硬件,是没有驱动的。CPUCPU内存内存l l对于虚拟设备驱动程序,没有物理设备。对于虚拟设备驱动程序,没有物理设备。文件系统驱动程序文件系统驱动程序RAM diskRAM disk中断有时难于处理中断有时难于处理l lWindows CEWindows CE提供逻辑中断提供逻辑中断 (SYSINTRs) (SYSINTRs) l l中断由一个用户态的线程进行处理中断由一个用户态的线程进行处理 (IST) (IST)为什么应当写驱动程序?为什么应当写驱动程序?l l当我们设计硬件时,就需要提供这一硬件当我们设计硬件时,就需要提供这一硬件 的驱动软件。的驱动软

6、件。l l硬件硬件OEMOEM厂商不提供基于厂商不提供基于Windows CEWindows CE的的 硬件驱动,但是提供硬件的规格说明。硬件驱动,但是提供硬件的规格说明。l l对于一个现有硬件驱动的功能进行扩展。对于一个现有硬件驱动的功能进行扩展。驱动分类驱动分类整体整体 l lWindows CE Windows CE 整体上将设备驱动分为三种整体上将设备驱动分为三种: : 内置驱动内置驱动总线总线流接口流接口内置驱动内置驱动l l硬件所必须的驱动程序,这些驱动程序通硬件所必须的驱动程序,这些驱动程序通 常由设计常由设计OEMOEM厂商进行设计。厂商进行设计。l l如如: :键盘,触摸屏,

7、音频设备。键盘,触摸屏,音频设备。l l可能不支持一般的驱动接口,也有可能带可能不支持一般的驱动接口,也有可能带 有扩展的接口或者完全提供一个用户自定有扩展的接口或者完全提供一个用户自定 义的接口。义的接口。l l内置驱动通常需要针对具体的操作系统进内置驱动通常需要针对具体的操作系统进 行小幅改动。行小幅改动。总线驱动总线驱动l l管理系统总线如管理系统总线如PCIPCI总线等。总线等。PCMCIAPCMCIA与与 CompactFlashCompactFlash也在其列。也在其列。l l负责处理总线上硬件的询问,以及资源的负责处理总线上硬件的询问,以及资源的 分配。分配。 l l同时也请求设

8、备管理器为总线上的硬件安同时也请求设备管理器为总线上的硬件安 装适当驱动程序。装适当驱动程序。驱动分类驱动分类 详细详细l lAudio DriversAudio Drivers l lBattery DriversBattery Drivers l lBlock DriversBlock Drivers l lBluetooth HCI Transport DriverBluetooth HCI Transport Driver l lDirect3D Device Driver InterfaceDirect3D Device Driver Interface l lDirectDraw

9、Display DriversDirectDraw Display Drivers l lDisplay DriversDisplay Drivers l lDVD-Video RendererDVD-Video Renderer l lIEEE 1394 DriversIEEE 1394 Drivers l lKeyboard DriversKeyboard Drivers l lNotification LED DriversNotification LED Drivers l lParallel Port DriversParallel Port Drivers l lPC Card D

10、riversPC Card Drivers l lPrinter DriversPrinter Drivers l lSerial Port DriversSerial Port Drivers l lSmart Card DriversSmart Card Drivers l lStream Interface DriversStream Interface Drivers l lTouch Screen DriversTouch Screen Drivers l lUSB DriversUSB Drivers 参见文档参见文档: :Driver Development - Driver D

11、evelopment - Driver CategoriesDriver Categories驱动的加载过程驱动的加载过程l l大多数的设备驱动由设备管理器大多数的设备驱动由设备管理器 ( (Device.exe)Device.exe)进程在系统启动时进行加载进程在系统启动时进行加载 。l l另一方面,其中一部分内置驱动程序由另一方面,其中一部分内置驱动程序由 GWES.exeGWES.exe进行加载。这些驱动包括显示进行加载。这些驱动包括显示 器驱动器驱动 (DDI.dll) (DDI.dll)、键盘驱动、鼠标驱动、键盘驱动、鼠标驱动、 触摸屏驱动等。触摸屏驱动等。驱动的加载过程驱动的加载过

12、程1.1.当当Device.exeDevice.exe对设备驱动程序进行安装对设备驱动程序进行安装 时将在注册表的时将在注册表的HKEY_LOCAL_ HKEY_LOCAL_ MACHINEDriversMACHINEDrivers项下检查一个字符串项下检查一个字符串 ,其值为,其值为 RootKeyRootKey, ,传统地,其名字为传统地,其名字为 BuiltInBuiltIn 。2.2.然后设备管理器在进行初始化时使用注册然后设备管理器在进行初始化时使用注册 信息检查器为它需要安装的各个驱动读取信息检查器为它需要安装的各个驱动读取 值为值为RootKeyRootKey的键。的键。 驱动的

13、加载过程驱动的加载过程驱动的加载过程驱动的加载过程3.3.安装安装DLL,DLL,给每一个驱动创建一个给每一个驱动创建一个ActiveActive 键,然后调用键,然后调用ActivateDeviceActivateDevice 或者或者 ActivateDeviceExActivateDeviceEx将将DLLDLL注册为系统中的注册为系统中的 一个设备驱动程序。一个设备驱动程序。 4.4.ActivateDeviceActivateDevice在在 HKEY_LOCAL_MACHINEDriversActiHKEY_LOCAL_MACHINEDriversActi veve下创建一个新的键

14、值。下创建一个新的键值。驱动的加载过程驱动的加载过程驱动加载驱动加载APIAPIl l设备驱动程序也能通过应用程序进行手动设备驱动程序也能通过应用程序进行手动 的安装,这是的安装,这是ActivateDeviceExActivateDeviceEx的一个首的一个首 选的功能。选的功能。l l安装驱动一个更老的方法是使用安装驱动一个更老的方法是使用 RegisterDeviceRegisterDevice 与与 DeregisterDeviceDeregisterDevice 主要内容主要内容l l概述概述l l流驱动接口流驱动接口l l设备驱动程序架构设备驱动程序架构l lUSB mouse

15、USB mouse 驱动开发示例驱动开发示例l lWindows CE Windows CE 系统服务系统服务什么是流接口什么是流接口l l流接口驱动包括所有提供流接口函数的驱流接口驱动包括所有提供流接口函数的驱 动程序,不管由这个驱动控制的设备是什动程序,不管由这个驱动控制的设备是什 么类型。么类型。 l l典型的流接口驱动程序有:典型的流接口驱动程序有:文件系统驱动文件系统驱动 (iostream, fstream) (iostream, fstream)COM, LPTCOM, LPT使用流接口使用流接口hSer = CreateFile(TEXT(“COM1:”), GENERIC_R

16、EAD, 0, NULL, OPEN_EXSITING, 0, NULL);rc = ReadFile(hSer, TransmitCommChar(hSer, a);CloseHandle(hSer);直接使用直接使用Win32Win32文件系统文件系统APIAPI。创建一个流驱动程序创建一个流驱动程序1.1.写一个导出具体流接口的写一个导出具体流接口的DLLDLL2.2.编译设备驱动程序编译设备驱动程序3.3.对注册表进行配置对注册表进行配置流接口函数流接口函数函数名说明 XXX_Close关闭以hOpenContext标识的设备上下文。 XXX_Deinit由设备管理器调用来删除对某一设备的初始化信息。 XXX_Init由设备管理器调用来对某一设备进行初始化。 XXX_IOControl向设备发送命令 XXX_Open打开一个设备以进行读、写或者既读又写。当应用调用 Creat

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号