Windows 环境下的设备 驱动程序设计 [email protected]

25
Windows Windows 环环环环环环 环环环环环环 环环环环环环 环环环环环环 [email protected] [email protected] n n

description

Windows 环境下的设备 驱动程序设计 [email protected]. 什么是驱动程序?. 驱动程序即 Driver ,是驱动某种实际或者虚拟设备的一段程序 大部分驱动程序是操作系统核心的一部分 微软提供一些标准设备如鼠标,键盘,网卡,硬盘, u 盘等的驱动程序 自己开发的产品通常需要驱动程序,如 modem ,数码相机,摄像头等. 为什么需要驱动程序. 驱动程序是硬件设备和应用程序之间必不可少的一层 可以把驱动程序当作是对设备的一个抽象,它为应用程序提供一个访问硬件的接口. Windows 驱动程序的发展. - PowerPoint PPT Presentation

Transcript of Windows 环境下的设备 驱动程序设计 [email protected]

Page 1: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

Windows Windows 环境下的设备环境下的设备驱动程序设计驱动程序设计

[email protected]@mti.xidian.edu.cn

Page 2: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

什么是驱动程序?什么是驱动程序? 驱动程序即驱动程序即 DriverDriver ,是驱动某种实际或者,是驱动某种实际或者

虚拟设备的一段程序虚拟设备的一段程序 大部分驱动程序是操作系统核心的一部分大部分驱动程序是操作系统核心的一部分 微软提供一些标准设备如鼠标,键盘,网微软提供一些标准设备如鼠标,键盘,网

卡,硬盘,卡,硬盘, uu 盘等的驱动程序盘等的驱动程序 自己开发的产品通常需要驱动程序,如自己开发的产品通常需要驱动程序,如 momo

demdem ,数码相机,摄像头等,数码相机,摄像头等

Page 3: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

为什么需要驱动程序为什么需要驱动程序 驱动程序是硬件设备和应用程序之间必不驱动程序是硬件设备和应用程序之间必不

可少的一层可少的一层 可以把驱动程序当作是对设备的一个抽象,可以把驱动程序当作是对设备的一个抽象,

它为应用程序提供一个访问硬件的接口它为应用程序提供一个访问硬件的接口

Page 4: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

Windows Windows 驱动程序的发展驱动程序的发展 实模式实模式 Windows (Real-Mode WinWindows (Real-Mode Win

dows) dows) 标准模式标准模式 Windows (Standard-MoWindows (Standard-Mo

de Windows)de Windows) 增强模式增强模式 Windows (Enhanced-MWindows (Enhanced-M

ode Windows )ode Windows ) Windows98&2k&NT&XP&Server Windows98&2k&NT&XP&Server

2003 2003

Page 5: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

实模式实模式Windows (Real-MoWindows (Real-Mode Windows)de Windows)

MS-DOS MS-DOS 和系统基本输入输出系统和系统基本输入输出系统 (BIOS) (BIOS) 就已经提供就已经提供了许多硬件设备的驱动程序 。了许多硬件设备的驱动程序 。

BIOS BIOS 通过一些常用的软件中断,开放出驱动程序的服务 ,通过一些常用的软件中断,开放出驱动程序的服务 ,像像 INT 10h INT 10h 是显示系統中断,是显示系統中断, INT 13hINT 13h 是磁盘子系統中是磁盘子系統中断,断, INT 16h INT 16h 是键盘中断等等。是键盘中断等等。 BIOS BIOS 也处理硬件中断,也处理硬件中断,并承担对“可编程中断控制器”(并承担对“可编程中断控制器”( Programmable InterProgrammable Interrupt Controller rupt Controller ,, PIC PIC )的管理任务。)的管理任务。

MS-DOS MS-DOS 也通过软件中断(如 也通过软件中断(如 INT 21h INT 21h 、、 INT 25h INT 25h 、、INT 26h INT 26h )提供了系统服务 ,并提供一个机制()提供了系统服务 ,并提供一个机制( CONFICONFIG.SYS G.SYS 中的 中的 device= device= 语句),让新的或强化后的驱动程语句),让新的或强化后的驱动程序能夠在系統启动时被加载进操作系统内核。序能夠在系統启动时被加载进操作系统内核。

Page 6: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

标准模式标准模式Windows (StandaWindows (Standard-Mode Windows)rd-Mode Windows)

早期的 早期的 Windows Windows 中,中, MS-DOS MS-DOS 和 和 BIOS BIOS 是最是最重要的。重要的。 WindowsWindows 运行在实模式状态中,这时运行在实模式状态中,这时的的 WindowsWindows 充其量不过是一个强化后的充其量不过是一个强化后的 MS-DOMS-DOSS 图形用户界面而已。从系统角度看,图形用户界面而已。从系统角度看, WindowsWindows只不过是个大的图形应用程序。 只不过是个大的图形应用程序。

Intel 80286 Intel 80286 的出现,使 的出现,使 WindowsWindows 能夠在保护能夠在保护模式中运行并获得高达 模式中运行并获得高达 16MB 16MB 实际内存空间。依实际内存空间。依靠保护模式和实模式的转换,靠保护模式和实模式的转换, Windows Windows 仍然继仍然继续使用续使用 MS-DOS MS-DOS 和 和 BIOS BIOS 提供的服务来完成所提供的服务来完成所有的系统需求。这种运作模式被称为 有的系统需求。这种运作模式被称为 WindowsWindows标准模式标准模式 (Windows standard mode) (Windows standard mode) 。 。

Page 7: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

标准模式标准模式Windows (StandaWindows (Standard-Mode Windows)rd-Mode Windows)

在 在 80286 80286 机器上切换实模式和保护模式,机器上切换实模式和保护模式,系统开销很大系统开销很大

显然 显然 Windows Windows 需要一种方法,避免每次需要一种方法,避免每次一有事件发生,像是键盘被按下或鼠标移一有事件发生,像是键盘被按下或鼠标移动等等,就得切换到实模式。动等等,就得切换到实模式。

解決方法就是写一个保护模式驱动程序,解決方法就是写一个保护模式驱动程序,可以在保护模式中处理 可以在保护模式中处理 I/O I/O 中断。 中断。

Page 8: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

标准模式标准模式Windows (StandaWindows (Standard-Mode Windows)rd-Mode Windows)

这些驱动程序直到今天我们都还在使用,在 这些驱动程序直到今天我们都还在使用,在 SYSSYSTEM TEM 子目录中看到的扩展名为 子目录中看到的扩展名为 .DRV .DRV 的文件都的文件都是是 .. 包括 包括 MOUSE.DRV ,KEYBOARD.DRV, SYMOUSE.DRV ,KEYBOARD.DRV, SYSTEM.DRV,SOUND.DRV STEM.DRV,SOUND.DRV 等等 等等

我把它们称为 我把它们称为 ring3 DLL ring3 DLL 驱动程序,因为它们驱动程序,因为它们实质上都是 实质上都是 16 16 位 位 Windows Windows 动态链接库(动态链接库( DLDLLs Ls ))

它们的任务是在不离开 它们的任务是在不离开 CPUCPU 保护模式的前提下,保护模式的前提下,和 和 Windows KERNEL Windows KERNEL 、、 USER USER 、、 GDI GDI 模块模块之间形成接口。 之间形成接口。

Page 9: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

增强模式增强模式Windows (EnhanWindows (Enhanced-Mode Windows )ced-Mode Windows )

Intel 80386 CPU Intel 80386 CPU 使 使 WindowsWindows 的第三种操作模的第三种操作模式(所谓的 式(所谓的 enhanced modeenhanced mode )成为可能。在此)成为可能。在此模式中 模式中 Windows Windows 采用分页采用分页 (paging) (paging) 和虚拟和虚拟 8686(V86) (V86) 特性,创造出虛拟机器(特性,创造出虛拟机器( VirtualMachinVirtualMachines es ,, VMs VMs )。 )。

对一个应用程序而言,对一个应用程序而言, VM VM 就像一独立的的个人就像一独立的的个人电脑,独自拥有自己的键盘、鼠标、显示器等等电脑,独自拥有自己的键盘、鼠标、显示器等等硬件。而实际上,经过所谓的虛拟化(硬件。而实际上,经过所谓的虛拟化( virtualizvirtualization ation ),数个 ),数个 VMs VMs 共享相同硬件。 共享相同硬件。

Page 10: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

增强模式增强模式Windows (EnhanWindows (Enhanced-Mode Windows )ced-Mode Windows )

虛拟化是 虛拟化是 VxDs VxDs 的工作。的工作。 VxD VxD 的名称来自于 的名称来自于 ““ virtual x device”virtual x device” ,意思是此驱动程序用来,意思是此驱动程序用来虛拟化某个(虛拟化某个( x x )设备。例如:)设备。例如: VKDVKD 用来虛拟用来虛拟化键盘, 化键盘, VMD VMD 用来虛拟化鼠标。使用来虛拟化鼠标。使 Windows Windows 和任何一个和任何一个 MS-DOSMS-DOS 程序都自认为独立拥有属于程序都自认为独立拥有属于自己的键盘和鼠标。自己的键盘和鼠标。

某些某些 VxDVxD 并不是为了虚拟化某些硬件,而是提供并不是为了虚拟化某些硬件,而是提供各种底层系统服务,如页面交换(各种底层系统服务,如页面交换( PAGESUAP)PAGESUAP)和页面文件(和页面文件( PAGEFILE)PAGEFILE) ,他们共同管理交换,他们共同管理交换文件(文件( SWAP FILESWAP FILE ))

在在 windows95windows95 和和 windows98windows98 中,有很多这种中,有很多这种VxD VxD 驱动程序驱动程序

Page 11: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

增强模式增强模式Windows (EnhanWindows (Enhanced-Mode Windows )ced-Mode Windows )

CIHCIH病毒就是运用的是病毒就是运用的是 VXDVXD 技术。所以不技术。所以不可能在 可能在 NTNT 和和 windows 2kwindows 2k 及以后的操作及以后的操作系统中感染系统中感染 CIHCIH病毒。 因为这些系统不支病毒。 因为这些系统不支持持 VxD VxD 特性特性

Page 12: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

Windows98&2K&NT&XWindows98&2K&NT&XP&P&

Server 2003Server 2003 19961996 年的年的 Windows Hardware EngineeWindows Hardware Engineering Conferencering Conference ( ( WinHECWinHEC )会议上,)会议上,MicrosoftMicrosoft 宣布了一种新的宣布了一种新的 WindowsWindows 设设备驱动程序模型——备驱动程序模型——Windows Driver MWindows Driver Modelodel (( WDMWDM )。)。

WDMWDM 模型的驱动程序是建立在模型的驱动程序是建立在 NTNT 式驱式驱动程序之上,主要是加入了即插即用(动程序之上,主要是加入了即插即用( pluplug and play g and play )特性)特性

Page 13: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

NTNT式驱动程序式驱动程序 在在 Windows NTWindows NT 中,中, 8038680386 保护模式的保护模式的

“保护”比“保护”比Windows 95Windows 95 中更坚固 。比如在中更坚固 。比如在Windows 95Windows 95 中,至少应用程序中,至少应用程序 I/OI/O 操作是操作是不受限制的,而在不受限制的,而在 Windows NTWindows NT 中,应用中,应用程序连这点权限都被剥夺了。在程序连这点权限都被剥夺了。在 NTNT 中应用中应用程序几乎不太可能进入真正的程序几乎不太可能进入真正的 ring0ring0 层。层。

在在 Windows NTWindows NT 中,存在三种中,存在三种 Device DrivDevice Driverer::

Virtual device Driver Virtual device Driver ,, GDI Driver GDI Driver ,, KKernel Mode Driver ernel Mode Driver

Page 14: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

NTNT式驱动程序式驱动程序 Virtual device Driver (VDD)Virtual device Driver (VDD) ,通过,通过 VDDVDD ,, 1616

位应用程序,如位应用程序,如 DOS DOS 和和 Win16Win16 应用程序可以访问应用程序可以访问特定的特定的 I/OI/O端口(注意,不是直接访问,而是要通端口(注意,不是直接访问,而是要通过过 VDDVDD 来实现访问)。 来实现访问)。

GDI DriverGDI Driver ,提供显示和打印所需的,提供显示和打印所需的 GDIGDI函数。 函数。 Kernel Mode Driver Kernel Mode Driver ,实现对特定硬件的操作,,实现对特定硬件的操作,

是是 Windows NTWindows NT 中唯一可以对硬件中断和中唯一可以对硬件中断和 DMADMA 进进行操作的行操作的 DriverDriver 。。 SCSI SCSI 小端口驱动和 网卡小端口驱动和 网卡 NDIS NDIS 驱动都是驱动都是 Kernel Mode DriverKernel Mode Driver 的一种特殊形式。 的一种特殊形式。

Page 15: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

驱动程序的现在驱动程序的现在 WDMWDM 是主流,它在是主流,它在 Windows NT Windows NT 的的 KeKe

rnel Mode Driver rnel Mode Driver 之上加入了之上加入了 PNPPNP 特性特性 支持的操作系统包括支持的操作系统包括 windows 98windows 98 ,, MEME ,,

20002000 ,, XP, SERVER 2003XP, SERVER 2003 我们现在要写的基本上都是我们现在要写的基本上都是 WDMWDM 模型的模型的

驱动程序驱动程序

Page 16: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

驱动程序的将来驱动程序的将来 Windows Driver FoundationWindows Driver Foundation ((WDWD

FF )),是微软新一代的驱动程序模型,现在,是微软新一代的驱动程序模型,现在相应的相应的 ddk ddk 还在测试阶段还在测试阶段

支持的操作系统包括: 支持的操作系统包括: Microsoft Windows 2000Microsoft Windows 2000

Microsoft Windows XP Microsoft Windows XP Microsoft Windows Server 2003 Microsoft Windows Server 2003 Microsoft Windows "Longhorn" Microsoft Windows "Longhorn"

Page 17: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

结论结论 WDMWDM 之前的之前的 VxDVxD 式和式和 NTNT 式驱动程序已式驱动程序已

经逐渐退出历史舞台经逐渐退出历史舞台 WDFWDF 比比WDMWDM 更先进,但是对于我们还更先进,但是对于我们还

是可望而不可及。是可望而不可及。 所以,我们现在还是要开发基于所以,我们现在还是要开发基于WDMWDM 模模型的驱动程序,所以我们以后讲的都是型的驱动程序,所以我们以后讲的都是 WWDMDM 模型的驱动程序设计知识模型的驱动程序设计知识

Page 18: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

驱动程序开发工具驱动程序开发工具

Windows ddkWindows ddkDriverWorks DriverWorks + + WindWind

ows ddkows ddkWindriverWindriver

Page 19: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

开发工具比较开发工具比较 工具工具 开发效率开发效率 执行效率执行效率Windows Windows DDKDDK (( Driver Driver Development KitDevelopment Kit ))

低低

高高

DriverWorksDriverWorks++ DDKDDK 较高较高 较高较高

WinDriverWinDriver

高高 低低

Page 20: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

开发工具比较开发工具比较 上述三种开发工具,难度由大到小,开发上述三种开发工具,难度由大到小,开发速度当然也是由慢到快。速度当然也是由慢到快。

所开发的程序的执行效率是由高到低所开发的程序的执行效率是由高到低 产品级的驱动程序通常都是用产品级的驱动程序通常都是用 ddkddk 直接开直接开

发发 以前驱动程序课中师用第二种开发工具,以前驱动程序课中师用第二种开发工具,

我们选用难度最高,但是程序的执行效率我们选用难度最高,但是程序的执行效率也最高的第一种直接用也最高的第一种直接用 ddkddk 开发开发

Page 21: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

开发环境开发环境 操作系统,通常现在我们在操作系统,通常现在我们在 Windows 200Windows 200

00 上开发驱动程序,因为在上开发驱动程序,因为在 Windows 200Windows 20000 上开发的驱动程序在以后的操作系统中都上开发的驱动程序在以后的操作系统中都能用能用

在在 Windows 2000Windows 2000 中需要安装的软件包括,中需要安装的软件包括,Visual c++Visual c++ ,, Windows 2000 ddkWindows 2000 ddk ,, MSMSDNDN

调试工具可以选择调试工具可以选择WindbgWindbg 和和 softicesoftice ,,通常用通常用 softicesoftice 的多。的多。

Page 22: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

环境设置环境设置 驱动程序开发中可以完全没有必要使用驱动程序开发中可以完全没有必要使用 VisVis

ual c++ual c++ ,, ddkddk 有一套自带的编译链接工有一套自带的编译链接工具,但是使用具,但是使用 Visual c++Visual c++ 环境环境 ,,易于调试易于调试

但是最后编译和连接时使用的不是但是最后编译和连接时使用的不是 visual cvisual c++++ 的编译工具,所以需要对的编译工具,所以需要对 visual c++visual c++ 环环境进行设置。境进行设置。

设置的细节可以参考后面列出的参考书,设置的细节可以参考后面列出的参考书,也可以在网上查找。也可以在网上查找。

Page 23: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

参考书参考书 Windows WDMWindows WDM 设备驱动程序开发指南 设备驱动程序开发指南 孙义 等译 机械工业出版社 孙义 等译 机械工业出版社

Windows Windows 核心编程 王建华 等译 机械工业核心编程 王建华 等译 机械工业出版社 出版社

Window 2000Window 2000 设备驱动程序开发指南 机设备驱动程序开发指南 机械工业出版社械工业出版社

Page 24: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

可能要经常访问的网站可能要经常访问的网站

http://http://www.osr.comwww.osr.com..http://www.driverdevelop.http://www.driverdevelop.

com.com.http://www.microsoft.cohttp://www.microsoft.co

mm

Page 25: Windows  环境下的设备 驱动程序设计 sigang@mti.xidian

相关的新闻组相关的新闻组 Microsoft.public.development.device.driMicrosoft.public.development.device.dri

versvers Microsoft.public.windowsxp.device_drivMicrosoft.public.windowsxp.device_driv

er.dever.dev Free.it.computer.hardware.driversFree.it.computer.hardware.drivers Microsoft.public.ddk.win2000.multimediMicrosoft.public.ddk.win2000.multimedi

aa Microsoft.public.ddk.win2000.printer.viMicrosoft.public.ddk.win2000.printer.vi

deodeo