7设备驱动程序开发
硬件所必须的驱动程序,这些驱动程序通 常由设计OEM厂商进行设计。
如:键盘,触摸屏,音频设备。
可能不支持一般的驱动接口,也有可能带 有扩展的接口或者完全提供一个用户自定 义的接口。
内置驱动通常需要针对具体的操作系统进 行小幅改动。
总线驱动
管理系统总线如PCI总线等。PCMCIA与 CompactFlash也在其列。
对于逻辑设备驱动程序,采用Win32 APIs 从硬件获取数据
设备驱动程序是操作系统的一 部分,难于开发与调试
对于UNIX或者是 Windows 9x,设备驱动程 序是与操作系统映像连接的,并运行于系 统内核态。
对于windows CE,大多数的设备驱动程序 运行于用户态,简单的来说就是一个DLL 文件。
为什么应当写驱动程序?
当我们设计硬件时,就需要提供这一硬件 的驱动软件。
硬件OEM厂商不提供基于Windows CE的 硬件驱动,但是提供硬件的规格说明。
对于一个现有硬件驱动的功能进行扩展。
驱动分类—整体
Windows CE 整体上将设备驱动分为三种:
➢ 内置驱动 ➢ 总线 ➢ 流接口
内置驱动
负责处理总线上硬件的询问,以及资源的 分配。
同时也请求设备管理器为总线上的硬件安 装适当驱动程序。
驱动分类 – 详细
Audio Drivers Battery Drivers Block Drivers Bluetooth HCI Transport Driver Direct3D Device Driver Interface DirectDraw Display Drivers Display Drivers DVD-Video Renderer IEEE 1394 Drivers Keyboard Drivers Notification LED Drivers Parallel Port Drivers PC Card Drivers Printer Drivers Serial Port Drivers Smart Card Drivers Stream Interface Drivers Touch Screen Drivers USB Drivers
什么是流接口
流接口驱动包括所有提供流接口函数的驱 动程序,不管由这个驱动控制的设备是什 么类型。
典型的流接口驱动程序有:
➢ 文件系统驱动 (iostream, fstream) ➢ COM, LPT
使用流接口
hSer = CreateFile(TEXT(“COM1:”), GENERIC_READ, 0, NULL, OPEN_EXSITING, 0, NULL); rc = ReadFile(hSer, &ch, 1, &cBytes, NULL); TransmitCommChar(hSer, ‘a’); CloseHandle(hSer);
--译自 MSDN
“一般”驱动程序开发的理解
必须使用汇编语言对端口进行读写 设备驱动程序是操作系统的一部分,难于
开发与调试。 设备驱动程序控制硬件 中断比较难于处理
必须使用汇编语言读写端口
CEDDK.dll 提供 APIs与硬件进行通信
➢ HalGetBusData ➢ READ_PORT_UCHAR ➢ WRITE_REGISTER_ULONG
嵌入式软件开发导论
7. 设备驱动程序开发
同济大学软件学院 2005
主要内容
概述 流驱动接口 设备驱动程序架构 USB mouse 驱动开发示例 Windows CE 系统服务
什么是设备驱动程序
设备驱动程序是与硬件设备进行通信的系统 程序。一个设备可以是物理设备,也可以是 一个逻辑实体。通常,这些实体需要操作系 统对其进行控制,资源管理。设备驱动程序 就是管理这些物理设备或者虚拟设备,协议 或者系统服务的软件模块。 对于每一个基于 Windows CE的设备,设备驱动程序都是必 不可少。
驱动的加载过程
驱动的加载过程
3. 安装DLL,给每一个驱动创建一个Active 键, 然后调用ActivateDevice 或者 ActivateDeviceEx将DLL注册为系统中的 一个设备驱动程序。
4. ActivateDevice在 [HKEY_LOCAL_MACHINE\Drivers\Acti ve下创建一个新的键值。
驱动的加载过程
驱动加载API
设备驱动程序也能通过应用程序进行手动 的安装,这是ActivateDeviceEx的一个首 选的功能。
安装驱动一个更老的方法是使用 RegisterDevice 与 DeregisterDevice
主要内容
概述 流驱动接口 设备驱动程序架构 USB mouse 驱动开发示例 Windows CE 系统服务
驱动的加载过程
1. 当Device.exe对设备驱动程序进行安装时 将在注册表的[HKEY_LOCAL_ MACHINE]\Drivers项下检查一个字符串, 其值为 RootKey,传统地,其名字为 BuiltIn 。
2. 然后设备管理器在进行初始化时使用注册 信息检查器为它需要安装的各个驱动读取 值为RootKey的键。
设备驱动程序控制硬件
大多数的设备驱动程序用来控制硬件。
对于某些硬件,是没有驱动的。
➢ CPU ➢ 内存
对于虚拟设备驱动程序,没有物理设备。
➢ 文件系统驱动程序 ➢ RAM disk
中断有时难于处理
Windows CE提供逻辑中断 (SYSINTRs) 中断由一个用户态的线程进行处理 (IST)
直接使用Win32文件系统API。
创建一个流驱动程序
参见文档:
Driver Development -> Driver Categories
驱动的加载过程
大多数的设备驱动由设备管理器 (Deviቤተ መጻሕፍቲ ባይዱe.exe)进程在系统启动时进行加载。
另一方面,其中一部分内置驱动程序由 GWES.exe进行加载。这些驱动包括显示 器驱动 (DDI.dll)、键盘驱动、鼠标驱动、 触摸屏驱动等。