最新设备驱动程序开发

上传人:博****1 文档编号:591898165 上传时间:2024-09-18 格式:PPT 页数:81 大小:1.07MB
返回 下载 相关 举报
最新设备驱动程序开发_第1页
第1页 / 共81页
最新设备驱动程序开发_第2页
第2页 / 共81页
最新设备驱动程序开发_第3页
第3页 / 共81页
最新设备驱动程序开发_第4页
第4页 / 共81页
最新设备驱动程序开发_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《最新设备驱动程序开发》由会员分享,可在线阅读,更多相关《最新设备驱动程序开发(81页珍藏版)》请在金锄头文库上搜索。

1、幢缀津的烧谈证瑰巢烬刑涕哮量崭贺栅埋侍管昆龙存辑辙亮宠洲玫那领屡设备驱动程序开发设备驱动程序开发嵌入式软件开发导论嵌入式软件开发导论同济大学软件学院同济大学软件学院20057. 设备驱动程序开发设备驱动程序开发抽凌窘缓陛控舱论松芥侦群匡勿欧糯顷岗媒想扳阎边妥脑括念谆栋坑派碗设备驱动程序开发设备驱动程序开发主要内容主要内容l概述概述l流驱动接口流驱动接口l设备驱动程序架构设备驱动程序架构lUSB mouse 驱动开发示例驱动开发示例lWindows CE 系统服务系统服务滑鉴颇槽浙崎辩胜冉篮婿牟岔克诛港扦漱僚圃穷滥烦儒铺犀勘桥全诣百湿设备驱动程序开发设备驱动程序开发什么是设备驱动程序什么是设备驱

2、动程序设备驱动程序是与硬件设备进行通信的系统设备驱动程序是与硬件设备进行通信的系统程序。一个设备可以是物理设备,也可以是程序。一个设备可以是物理设备,也可以是一个逻辑实体。通常,这些实体需要操作系一个逻辑实体。通常,这些实体需要操作系统对其进行控制,资源管理。设备驱动程序统对其进行控制,资源管理。设备驱动程序就是管理这些物理设备或者虚拟设备,协议就是管理这些物理设备或者虚拟设备,协议 或者系统服务的软件模块。或者系统服务的软件模块。 对于每一个基于对于每一个基于Windows CE的设备,设备驱动程序都是必的设备,设备驱动程序都是必不可少。不可少。-译自译自 MSDN漠竖褥氯乙亦儒鸿南揍恕既伺

3、裴箱郑京超替突惟龟钱辱阳骆溶毖懈憾宏僧设备驱动程序开发设备驱动程序开发“一般一般”驱动程序开发的理解驱动程序开发的理解l必须使用汇编语言对端口进行读写必须使用汇编语言对端口进行读写l设备驱动程序是操作系统的一部分,难于设备驱动程序是操作系统的一部分,难于开发与调试。开发与调试。l设备驱动程序控制硬件设备驱动程序控制硬件l中断比较难于处理中断比较难于处理铭俘尺鹊婉庶沫最忿有暴溉鹿究撵毗督痈败弱易坑内游础屏摊睬涕棚换跳设备驱动程序开发设备驱动程序开发必须使用汇编语言读写端口必须使用汇编语言读写端口lCEDDK.dll 提供提供 APIs与硬件进行通信与硬件进行通信HalGetBusDataREAD

4、_PORT_UCHARWRITE_REGISTER_ULONGl l对于逻辑设备驱动程序,采用对于逻辑设备驱动程序,采用Win32 APIs 从硬件获取数据从硬件获取数据监谐烘艺饼商提责爵沸钩虎禾母搓茸宜割锈鼓盯兼呢踏裔缕吵爽离针岗练设备驱动程序开发设备驱动程序开发设备驱动程序是操作系统的一设备驱动程序是操作系统的一部分,难于开发与调试部分,难于开发与调试l对于对于UNIX或者是或者是 Windows 9x,设备驱动程设备驱动程序是与操作系统映像连接的,并运行于系序是与操作系统映像连接的,并运行于系统内核态。统内核态。l对于对于windows CE,大多数的设备驱动程序大多数的设备驱动程序运行

5、于用户态,简单的来说就是一个运行于用户态,简单的来说就是一个DLL文件。文件。鲸枪漏编薯径佑倪挝咳即绵为馈问对僻旧咨崎孰凸淹跪换卞福园趋拿剩缘设备驱动程序开发设备驱动程序开发设备驱动程序控制硬件设备驱动程序控制硬件l大多数的设备驱动程序用来控制硬件。大多数的设备驱动程序用来控制硬件。l对于某些硬件,是没有驱动的。对于某些硬件,是没有驱动的。CPU内存内存l l对于虚拟设备驱动程序,没有物理设备。对于虚拟设备驱动程序,没有物理设备。文件系统驱动程序文件系统驱动程序文件系统驱动程序文件系统驱动程序RAM diskRAM disk薯熟定式咱斡露鸦艺屯郎接冻学粘篡已龋猩舜儒匈号寺扯莫妓卸矛庶关句设备驱

6、动程序开发设备驱动程序开发中断有时难于处理中断有时难于处理lWindows CE提供逻辑中断提供逻辑中断 (SYSINTRs) l l中断由一个用户态的线程进行处理中断由一个用户态的线程进行处理 (IST)骑家僧辫吴重卧姓详阳憾厘仓继眯包漏歌穴粹砚昨仕秃菱挛砧涌雷搂炎焊设备驱动程序开发设备驱动程序开发为什么应当写驱动程序?为什么应当写驱动程序?l当我们设计硬件时,就需要提供这一硬件当我们设计硬件时,就需要提供这一硬件的驱动软件。的驱动软件。l硬件硬件OEM厂商不提供基于厂商不提供基于Windows CE的的硬件驱动,但是提供硬件的规格说明。硬件驱动,但是提供硬件的规格说明。l l对于一个现有硬

7、件驱动的功能进行扩展。对于一个现有硬件驱动的功能进行扩展。腰玛霄窖骇瀑尝渠蝶穿裤绷草选婿怨卖羔嘲影翅硒搔祝檄谎妇原摘彤忱死设备驱动程序开发设备驱动程序开发驱动分类驱动分类整体整体 lWindows CE 整体上将设备驱动分为三种整体上将设备驱动分为三种: 内置驱动内置驱动内置驱动内置驱动总线总线总线总线流接口流接口流接口流接口拔秸弄鲁克血欠侈伶聘酬龚捶挡公达茶汤裁巩缠榴韭笼篇茄逊钡构良只只设备驱动程序开发设备驱动程序开发内置驱动内置驱动l硬件所必须的驱动程序,这些驱动程序通硬件所必须的驱动程序,这些驱动程序通常由设计常由设计OEM厂商进行设计。厂商进行设计。l如如:键盘,触摸屏,音频设备。键盘

8、,触摸屏,音频设备。l可能不支持一般的驱动接口,也有可能带可能不支持一般的驱动接口,也有可能带有扩展的接口或者完全提供一个用户自定有扩展的接口或者完全提供一个用户自定义的接口。义的接口。l内置驱动通常需要针对具体的操作系统进内置驱动通常需要针对具体的操作系统进行小幅改动。行小幅改动。舰鳖溺铅娜矾狡惕席森馁纂滔踌曾烽职穆桔蚂囊叭濒羽培撵暑捂辈矗孰底设备驱动程序开发设备驱动程序开发总线驱动总线驱动l管理系统总线如管理系统总线如PCI总线等。总线等。PCMCIA与与 CompactFlash也在其列。也在其列。l负责处理总线上硬件的询问,以及资源的负责处理总线上硬件的询问,以及资源的分配。分配。 l

9、同时也请求设备管理器为总线上的硬件安同时也请求设备管理器为总线上的硬件安装适当驱动程序。装适当驱动程序。骨繁衣帘孙叁侵项雀焊僚串狸疆氖典可奋题殖箍搭歌堤阑狼鹏叼护惟凹矢设备驱动程序开发设备驱动程序开发驱动分类驱动分类 详细详细lAudio Drivers lBattery Drivers lBlock Drivers lBluetooth HCI Transport Driver lDirect3D Device Driver Interface lDirectDraw Display Drivers lDisplay Drivers lDVD-Video Renderer lIEEE 139

10、4 Drivers lKeyboard Drivers lNotification LED Drivers lParallel Port Drivers lPC Card Drivers lPrinter Drivers lSerial Port Drivers lSmart Card Drivers lStream Interface Drivers lTouch Screen Drivers lUSB Drivers 参见文档参见文档:Driver Development - Driver Development - Driver CategoriesDriver Categories存邪

11、唾易槐赚慌偷励碧豌孟缓的笆疡浦递昏殊蛋汛菩桥袜护逢着壕姨孪起设备驱动程序开发设备驱动程序开发驱动的加载过程驱动的加载过程l大多数的设备驱动由设备管理器大多数的设备驱动由设备管理器(Device.exe)进程在系统启动时进行加载。进程在系统启动时进行加载。l另一方面,其中一部分内置驱动程序由另一方面,其中一部分内置驱动程序由GWES.exe进行加载。这些驱动包括显示进行加载。这些驱动包括显示器驱动器驱动 (DDI.dll)、键盘驱动、鼠标驱动、键盘驱动、鼠标驱动、触摸屏驱动等。触摸屏驱动等。缩钳刊戴沪蔼唤蛰沈投卞沸涣竭蒸尔黍稻二掣段低鹰掐喘炉派耕酞窑兴酌设备驱动程序开发设备驱动程序开发驱动的加载

12、过程驱动的加载过程1.当当Device.exe对设备驱动程序进行安装时对设备驱动程序进行安装时将在注册表的将在注册表的HKEY_LOCAL_ MACHINEDrivers项下检查一个字符串,项下检查一个字符串,其值为其值为 RootKey,传统地,其名字为传统地,其名字为 BuiltIn 。2.然后设备管理器在进行初始化时使用注册然后设备管理器在进行初始化时使用注册信息检查器为它需要安装的各个驱动读取信息检查器为它需要安装的各个驱动读取值为值为RootKey的键。的键。 婴燎钝幂舷苍卿雀温齐立蓝拾圈丹零面邱券型身睛具君泌禾映煮纱巍叭溺设备驱动程序开发设备驱动程序开发驱动的加载过程驱动的加载过程

13、裁拆佃哨农钝事隐羡埔锡屑香蛊宽露假住妊彦洲侦绷负介钙妖拽畦彩鸥搞设备驱动程序开发设备驱动程序开发驱动的加载过程驱动的加载过程3.安装安装DLL,给每一个驱动创建一个给每一个驱动创建一个Active 键,键,然后调用然后调用ActivateDevice 或者或者 ActivateDeviceEx将将DLL注册为系统中的注册为系统中的一个设备驱动程序。一个设备驱动程序。 4.4.ActivateDevice在在 HKEY_LOCAL_MACHINEDriversActive下创建一个新的键值。下创建一个新的键值。慎鸡抉炕橡努病菏名避圈靠萨吗缕峰恋冬卑韵盔取硫霸嫩兆纷持琵辽烙心设备驱动程序开发设备驱

14、动程序开发驱动的加载过程驱动的加载过程深孙循揽舱横聊予增筋论篷促铅屯仇捶沮凡棠港能角窗尺畔羹裕活潭怕亲设备驱动程序开发设备驱动程序开发驱动加载驱动加载APIl设备驱动程序也能通过应用程序进行手动设备驱动程序也能通过应用程序进行手动的安装,这是的安装,这是ActivateDeviceEx的一个首的一个首选的功能。选的功能。l安装驱动一个更老的方法是使用安装驱动一个更老的方法是使用RegisterDevice 与与 DeregisterDevice 虑谴被卿跟蕊歹你萌枝肇色祭悸峦羊谤恩仰惦稠桓咯云肌同坑婶翁遭侄瑰设备驱动程序开发设备驱动程序开发主要内容主要内容l概述概述l流驱动接口流驱动接口l设备

15、驱动程序架构设备驱动程序架构lUSB mouse 驱动开发示例驱动开发示例lWindows CE 系统服务系统服务她掂鸡题十闭合操校彪惨扁铬焦圈液铃贯绩置骤央汤谗捏鬼盼府帐氯烫迟设备驱动程序开发设备驱动程序开发什么是流接口什么是流接口l流接口驱动包括所有提供流接口函数的驱流接口驱动包括所有提供流接口函数的驱动程序,不管由这个驱动控制的设备是什动程序,不管由这个驱动控制的设备是什么类型。么类型。 l典型的流接口驱动程序有:典型的流接口驱动程序有:文件系统驱动文件系统驱动文件系统驱动文件系统驱动 (iostream, fstream) (iostream, fstream)COM, LPTCOM,

16、 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);直接使用直接使用Win32文件系统文件系统API。熬韧停驶钨稻拣悔嗓馈彰峡凉樱畔貌境伊畸稚站怒竿粘悠馁篆溶沤蔽帝凸设备驱动程序开发设备驱动程序

17、开发创建一个流驱动程序创建一个流驱动程序1.写一个导出具体流接口的写一个导出具体流接口的DLL2.编译设备驱动程序编译设备驱动程序3.对注册表进行配置对注册表进行配置雏肢柱监滁曹艳贷尖诞瞩反欠旋酝伎坪狈念国拆模滁象法渡觅淮乡沛蠢乌设备驱动程序开发设备驱动程序开发流接口函数流接口函数函数名函数名说明说明XXX_Close关闭以hOpenContext标识的设备上下文。XXX_Deinit由设备管理器调用来删除对某一设备的初始化信息。XXX_Init由设备管理器调用来对某一设备进行初始化。XXX_IOControl向设备发送命令XXX_Open打开一个设备以进行读、写或者既读又写。当应用调用Cre

18、ateFile来打开某一个设备文件名时将间接地调用这一个函数。XXX_PowerDown停止向设备供电。只有在软件控制下关机的设备上才可用。XXX_PowerUp恢复向设备供电XXX_Read从设备读取数据XXX_Seek在设备中移动数据指针XXX_Write向设备写数据舒仓润孪鲁箔堪第六叙简邀诸络幌焰初玖远航蛇只虐雄慎槐碰检营请菱伏设备驱动程序开发设备驱动程序开发构建设备驱动程序构建设备驱动程序l构建设备驱动程序与构建一个构建设备驱动程序与构建一个DLL一样简一样简单。单。 l可以使用可以使用Platform Builder与与EVC+。只。只需创建一个需创建一个Windows CE DLL

19、项目项目, 输出输出适当适当 的入口点,然后编写代码。的入口点,然后编写代码。l常犯的一个错误是没有将入口点声明为常犯的一个错误是没有将入口点声明为 extern C,因此,因此 C+编译器就不能处理输编译器就不能处理输出的函数名。出的函数名。疟祁捐购聚鞭殿陆芬些氏嘱擦捻系仍贾宦瑶的拐凿星澡褂碉坏陇篙危呵卯设备驱动程序开发设备驱动程序开发注册表设置注册表设置l在在 Project.reg中中:HKEY_LOCAL_MACHINEDriversBuiltInSampleHKEY_LOCAL_MACHINEDriversBuiltInSample Dll = mydriver.Dll Dll =

20、mydriver.Dll Prefix = DEM Prefix = DEM Index = dword:1 Index = dword:1 Order = dword:0 Order = dword:0 FriendlyName = Demo Driver FriendlyName = Demo Driver Ioctl = dword:0 Ioctl = dword:0毒党恤渣产邹蜘烃熟羔善悲吱妄羚抽着尉噪个附梁嫉否挎煤逮涕稽稿跌趴设备驱动程序开发设备驱动程序开发注册表设置注册表设置lOrder给所有的驱动设置相对安装顺序。给所有的驱动设置相对安装顺序。Order 为为0的驱动先安装,依次

21、安装的驱动先安装,依次安装Order为为1,2,的驱的驱动。动。Oder可以让开发者保证有相到依赖关系可以让开发者保证有相到依赖关系的多个驱动以适当的顺序进行安装。的多个驱动以适当的顺序进行安装。l lIndex指定在文件系统中的驱动名的数字部分。在默指定在文件系统中的驱动名的数字部分。在默指定在文件系统中的驱动名的数字部分。在默指定在文件系统中的驱动名的数字部分。在默认情况下,带有前缀认情况下,带有前缀认情况下,带有前缀认情况下,带有前缀COMCOM的驱动在文件系统的驱动在文件系统的驱动在文件系统的驱动在文件系统中分配名字为中分配名字为中分配名字为中分配名字为 COM1 COM1,下一个即为

22、,下一个即为,下一个即为,下一个即为COM2COM2。为。为。为。为了保证驱动总是安装成了保证驱动总是安装成了保证驱动总是安装成了保证驱动总是安装成COM2COM2,必须提供,必须提供,必须提供,必须提供Index = 2Index = 2。叶嗽计豺墙驴臻宴贼氢喉绳恕柄莆渭维扩能琵授祟排行低压金播倾丫粳极设备驱动程序开发设备驱动程序开发演示演示 :使用使用emulator编写一个流接口驱动编写一个流接口驱动程序并使用它程序并使用它纠蓖虚舜讼篙栽理帮的份繁窃马商银漫源戳叙龚盲诉恿岁县祈武凋庸俭堑设备驱动程序开发设备驱动程序开发驱动是如何工作的驱动是如何工作的1.When CE启动时启动时, De

23、vice.exe根据注册表中根据注册表中的设置安装所有的驱动程序。的设置安装所有的驱动程序。2.当安装当安装mydriver.dll时,时, device.exe 调用调用 DEM1_Init。3.Application程序调用程序调用CreateFile(“DEM1”)燃饿傻诉被东动螟诗叼驶巨赋哺略帕暮狼谬烫超萍兽泣岿鹊玩爬昭耸凳肺设备驱动程序开发设备驱动程序开发驱动是如何工作的驱动是如何工作的(2)4.Coredll.dll 处理处理API调用并切换到调用并切换到 device.exe5.Device.exe 调用调用mydriver.dll 的的DEM1_Open。6.CreateFil

24、e返回返回DEM1_Open的的retval精绒怒霹以啊醚箱沦卤潞卜弄什胖踏沏腕窥脚球筏视轴彩贰按狮蹦瞪美兰设备驱动程序开发设备驱动程序开发设备功能栈设备功能栈硬件硬件Windows CE DDK API设备驱动程序设备驱动程序设备管理器设备管理器(device.exe)应用程序应用程序戊润通拎苦卧艇子瑟已站氰台慢缓驾乍篷贬咕镍楔住闰默啸轻攀格哆忍楷设备驱动程序开发设备驱动程序开发主要内容主要内容l概述概述l流驱动接口流驱动接口l设备驱动程序架构设备驱动程序架构lUSB mouse 驱动开发示例驱动开发示例lWindows CE 系统服务系统服务浆棋憨蛰毫颊一针髓煽峨岁其葵映罐渠沂振递蛙物律琵

25、咖镶曳苏陵兑听艇设备驱动程序开发设备驱动程序开发驱动架构驱动架构胀河劳饰龟蔼疮维癌肃帐肇杂惩八隶锣芳酝惶虾涌乾肌狸盏桩料泥若坎玛设备驱动程序开发设备驱动程序开发驱动的类型驱动的类型近墒资芬系愚欺诅俯捕牡奔贯畏仪操蝎棕皿冰侨狸弘蒸孙式捶含月富塌逝设备驱动程序开发设备驱动程序开发内置与流安装机制内置与流安装机制l通常内置驱动程序根据注册键值安装在通常内置驱动程序根据注册键值安装在 GWES进程空间进程空间l总线驱动由总线驱动由Device.exe根据键值进行安装根据键值进行安装l可安装的流驱动或其它驱动由可安装的流驱动或其它驱动由Device.exe根据总线驱动或注册检查器进行安装。根据总线驱动或

26、注册检查器进行安装。祷咽擅剂铂嫂虾笔腕疲烷弥疡爽舒狠停升招咕木哈缺睫艰澎枯赡匣庆什司设备驱动程序开发设备驱动程序开发设备管理器设备管理器l用户级进程继续运行用户级进程继续运行l与内核、注册表交互的单独应用程序,以与内核、注册表交互的单独应用程序,以及流接口驱动及流接口驱动DLL。l提供提供ActivateDevice 与与 DeactivateDevice API。隐介丧梅煞纳南诌膜婿杆躬扛愤允煽渗第颜昂杭动档医鉴很块慈头颗翌匠设备驱动程序开发设备驱动程序开发设备管理器设备管理器l包括包括IO资源管理器资源管理器l安装注册表检查器安装注册表检查器(RegEnum.dll) ,并由,并由这一个注

27、册表检查器根据注册表进行驱动这一个注册表检查器根据注册表进行驱动的安装的安装l提供电源通知回调函数提供电源通知回调函数跟踪所有已安装的驱动程序,给设备接口发出跟踪所有已安装的驱动程序,给设备接口发出跟踪所有已安装的驱动程序,给设备接口发出跟踪所有已安装的驱动程序,给设备接口发出拉入或删除的通知拉入或删除的通知拉入或删除的通知拉入或删除的通知潜县玖邀耙肾哗职矿烬盯镇袖邑奋朗贮泣篮拯尘锐党递坏坐昧爸棍屋梅掀设备驱动程序开发设备驱动程序开发设备管理器设备管理器 l设备驱动程序的安装过程设备驱动程序的安装过程DEVICE.EXEKernelKernelI/O Resource Manager(part

28、 of Device.exe)REGENUM.DLLPCIBUS.DLLloadsloadsloadsloadsloadsloadsDEVICE.EXEDEVICE.EXEI/O Resource ManagerI/O Resource Manager(part of Device.exe)(part of Device.exe)REGENUM.DLLREGENUM.DLLPCIBUS.DLLPCIBUS.DLL创战琵同漳玉括哇堑见扇舟筑托慕民拇网侯唇麦勃掳动樊哺疹毋箍疽狗绍设备驱动程序开发设备驱动程序开发注册表枚举器注册表枚举器l注册枚举器是注册枚举器是RegEnum.dlllDevice.

29、exe根据根据HKEY_LOCAL_MACHINEDriversRootKey安安装注册枚举器装注册枚举器l注册枚举器给每一个要安装的驱动程序扫描表项注册枚举器给每一个要安装的驱动程序扫描表项l注册枚举器是可重入的,并支持分级使用注册枚举器是可重入的,并支持分级使用l当注册枚举器卸载时,同时也御载它安装的所有信当注册枚举器卸载时,同时也御载它安装的所有信息息l注册枚举器根据注册枚举器根据Order,检查紧挨着传给它的键的下检查紧挨着传给它的键的下一级键值。一级键值。l注册枚举器对每一个找到的子键调用注册枚举器对每一个找到的子键调用ActivateDeviceEx樱酱巾剧础描抉峨沿悸狗这粒所秘捕

30、谷干喧忻暇恩健脚墩宿院垒齿尉瞪恍设备驱动程序开发设备驱动程序开发ActivateDeviceExl由由Device.exe提供提供l总线驱动程序当安装设备驱动时调用总线驱动程序当安装设备驱动时调用ActivateDeviceExlActivateDeviceEx也在也在RAM工作区锁定流接口驱工作区锁定流接口驱动程序动程序l这可以防止代码页被丢弃这可以防止代码页被丢弃l注册检查器对找到的每一个内置子键调用注册检查器对找到的每一个内置子键调用ActivateDeviceExlActivateDeviceEx安装驱动并更新注册表安装驱动并更新注册表蘸您涉瞩销趋尝旧思霄郧箭白奖肺孤陛枝呐稳顷尹宋僻豢

31、瑞陕扔忠榨侩探设备驱动程序开发设备驱动程序开发接口类接口类l驱动程序的接口有以下特征驱动程序的接口有以下特征每一个每一个每一个每一个IclassIclass有一个有一个有一个有一个GUIDGUID,一个名字,一个名字,一个名字,一个名字GUIDGUID描述类设备接口描述类设备接口描述类设备接口描述类设备接口NameName 描述接口的实例描述接口的实例描述接口的实例描述接口的实例 COM1:, DSK1: COM1:, DSK1: 等等等等等等等等l l提供一个驱动接口提供一个驱动接口提供一个驱动接口提供一个驱动接口在注册表中的在注册表中的在注册表中的在注册表中的IclassIclass子键子

32、键子键子键驱动程序发布接口驱动程序发布接口驱动程序发布接口驱动程序发布接口 AdvertiseInterfaceAdvertiseInterfacel l应用程序访问接口应用程序访问接口应用程序访问接口应用程序访问接口 RequestDeviceNotificationsRequestDeviceNotificationsl l每个已有的接口的预定义每个已有的接口的预定义每个已有的接口的预定义每个已有的接口的预定义GUIDGUIDA32942B7-920C-486b-B0E6-92A702A99B35 A32942B7-920C-486b-B0E6-92A702A99B35 潭邮苯站怕棘趴挥惫

33、玉遗锑笔滁落办仓禾泉饼拷蓟蓖宗蛊碍玉量某磊耕翼设备驱动程序开发设备驱动程序开发I/O 资源管理资源管理(IORM)lIORM是设备管理器必备的部分是设备管理器必备的部分l跟踪可用跟踪可用I/O资源资源 (IRQ与与I/O基地址基地址)lOEM为内置设备预分配的资源为内置设备预分配的资源l当在总线上安装一个客户驱动时,总线驱动当在总线上安装一个客户驱动时,总线驱动请求资源请求资源ResourceReleaseResourceRequestResourceCreateListl当存在冲突时当存在冲突时IORM调用调用 ResourceRequest失败失败窖昌差狰棍抡踩芍了挺挑缘跌涨倘仙列昭馈迫漏

34、札矿憨骑剁轨此蕊耶右疙设备驱动程序开发设备驱动程序开发注册表帮助例程注册表帮助例程l从注册表中读取资源初始化信息从注册表中读取资源初始化信息OpenDeviceKeyDDKReg_GetIsrInfoDDKReg_GetWindowInfoDDKReg_GetPciInfo在在COREDLL的的API在在 and 的函数原型的函数原型l l在在在在publiccommonoakdriverspubliccommonoakdrivers中的例子中的例子中的例子中的例子wavedevpddes1371wavepdd.cpp - wavedevpddes1371wavepdd.cpp - GetRe

35、gistryConfigGetRegistryConfig单凑矛凳泳勤左压署洋海份肯载渡霹舀牙吴仁虽姻赶箩渍拢肆偏彝洱冈惶设备驱动程序开发设备驱动程序开发电源管理电源管理l电源管理器电源管理器灵活的系统级与外设级电源管理灵活的系统级与外设级电源管理灵活的系统级与外设级电源管理灵活的系统级与外设级电源管理使设备智能化地管理它们的电源使设备智能化地管理它们的电源使设备智能化地管理它们的电源使设备智能化地管理它们的电源在设备与系统或应用之间充当协调者在设备与系统或应用之间充当协调者在设备与系统或应用之间充当协调者在设备与系统或应用之间充当协调者使使使使OEMOEM修改调用修改调用修改调用修改调用Po

36、werOffSystem()PowerOffSystem()的相关代的相关代的相关代的相关代码码码码陷王承谬骨吩痘栗钡日中貉腻眉跑弓狼抵驼任诚虾盯种埠筑宙暮慷棵按沦设备驱动程序开发设备驱动程序开发电源管理电源管理l系统级电源状态系统级电源状态l l设备设备设备设备( (外设外设外设外设) )级电源状态级电源状态级电源状态级电源状态打开打开系统空闲系统空闲用户空闲用户空闲挂起挂起D0 全供电全供电D3 睡眠睡眠D1 降级模式降级模式D4 关闭关闭D2 备用模式备用模式伐电叼短全绿听拘西构识粪择芬贩卖辈倡哟来聪匡护破因仟殖怔沂鸭受荒设备驱动程序开发设备驱动程序开发电源管理器架构电源管理器架构驱动驱

37、动电源管理器电源管理器 (pm.dll)PM APIs应用程序应用程序通知消息队列通知消息队列通知消息队列通知消息队列驱动驱动驱动驱动APIsAPIs应用应用应用应用APIAPI手酪臃日茫蛋蚜莉茧删陕责函故经盼浮枫趣能氦腮辫逞秉最作图首烘装访设备驱动程序开发设备驱动程序开发物理内存物理内存64 MB64 MBRAMRAM32 MB32 MBFlashFlashDbg Serial PortDbg Serial Port2 2 GGB BU Us se er r5 51 12 2 MMB BU Un nc ca ac ch he ed d5 51 12 2 MMB BC Ca ac ch he

38、ed d64 MB RAM64 MB RAM32 MB Flash32 MB Flash64 MB RAM64 MB RAM32 MB Flash32 MB Flash物理内存物理内存内核虚拟地址内核虚拟地址ReservedReserved0400000004000000820000008200000080000000800000008000000080000000A0000000A0000000C0000000C00000000 0棉逐垛汉虎操忘舷卞颗掂母呼菠伍扫逊屡泄韭啼躯原裴详撕响胳碘呛傻难设备驱动程序开发设备驱动程序开发Not UsedNot UsedSlot 0Slot 0Slot

39、32Slot 3264 KB64 KB32 MB32 MB64 MB64 MB2 GB2 GB3 GB3 GB4 GB4 GBMemory mapped filesMemory mapped filesAbove 2G-3GAbove 2G-3GMapped to physical Mapped to physical memorymemoryVirtual Virtual address address spacespaceSlot 1Slot 1Slot 32Slot 32NULL pointers NULL pointers 虚拟地址空间虚拟地址空间512M Cached512M Cac

40、hed 512M Non-Cached512M Non-Cached 0x800000000x800000000xA00000000xA0000000Accessable via Accessable via MmMapiIoSpaceMmMapiIoSpace魁涡那孰茎噬吃江矫糊趁激斑公拴滔辅气茎纺歹渝店藤臼栈盅立隋灭墩椿设备驱动程序开发设备驱动程序开发内存管理函数内存管理函数l设备驱动程序是用户态模块设备驱动程序是用户态模块 必须将物理内存映射成虚拟内存必须将物理内存映射成虚拟内存l lVirtualAlloc, VirtualFree: 预留预留,释放虚拟释放虚拟内存内存MEM_RESE

41、RVEMEM_RESERVEl lVirtualCopy: 将一个物理内存区域映射到将一个物理内存区域映射到一个虚拟内存区域一个虚拟内存区域PAGE_NOCACHEPAGE_NOCACHEPAGE_PHYSICALPAGE_PHYSICAL奖浮着渭敷颖轮臃州畏渡赔烧狠评冈羡葵沏鳃溯敞晒偏逊友畜钓梢救东宛设备驱动程序开发设备驱动程序开发驱动的内存访问与映射驱动的内存访问与映射lMapPtrToProcess将一个地址空间的指针映射成另外一个指针将一个地址空间的指针映射成另外一个指针 l lGetCurrentProcess / SetProcPermissions重新找回进程重新找回进程重新找回

42、进程重新找回进程IDID用于用于用于用于MapPtrToProcessMapPtrToProcess函数函数函数函数 l lMmMapIoSpace将一个物理地址空间映射成一个不分页的,由将一个物理地址空间映射成一个不分页的,由将一个物理地址空间映射成一个不分页的,由将一个物理地址空间映射成一个不分页的,由进程决定的地址空间进程决定的地址空间进程决定的地址空间进程决定的地址空间世筐辐矢办判剿才爱锌菱亡梦迹酱献苑兰意挣戚摸桔瞥曼愧磺奎俏踞容皂设备驱动程序开发设备驱动程序开发CEDDKlCE v2.1x 以及后来的版本支持独立于平台的以及后来的版本支持独立于平台的I/O配配置置l让让OEM以及驱动

43、开发人员使用它们以及驱动开发人员使用它们lCEDDK.DLL总线管理总线管理 内存管理内存管理I/O管理管理l l从从从从NTDDKNTDDK拿来的拿来的拿来的拿来的CEDDK APICEDDK API直到直到直到直到V2.12V2.12以后的版本才有文档以后的版本才有文档以后的版本才有文档以后的版本才有文档但在大多数但在大多数但在大多数但在大多数V2.00V2.00版中都有版中都有版中都有版中都有包仟遍慕个戊锋乞原泼祥恍焉伺椒圾歪琢疤躲芦信守像韵瓮秤备拴嘿箔蛀设备驱动程序开发设备驱动程序开发CEDDK 简介简介l设备驱动使用设备驱动使用CEDDKl正常开发的驱动是跨平正常开发的驱动是跨平台二

44、进制兼容的台二进制兼容的跨跨跨跨CPUCPU的源代码兼容的源代码兼容的源代码兼容的源代码兼容设备管理器设备管理器设备驱动设备驱动CEDDK.DLLCEDDK.DLL硬件硬件阮惭未阉竹脏拄腋娠灭妙汛叔束刚煽娥晤藕斥删亩嚷混耿址尸秒醉窑碰骨设备驱动程序开发设备驱动程序开发CEDDK 内容内容部分部分函示例函示例总线管理总线管理HalGetBusDataByOffset()HalGetBusDataByOffset()HalGetBusData()HalGetBusData()HalSetBusDataByOffset()HalSetBusDataByOffset()HalSetBusData()H

45、alSetBusData()HalTranslateBusAddress()HalTranslateBusAddress()HalTranslateSystemAddress()HalTranslateSystemAddress()内存管理内存管理MmMapIOSpace MmUnmapIOSpaceHalAllocateCommonBufferI/O 存取存取 XXXX = UCHAR/USHORT/ULONGREAD_REGISTER_XXXXWRITE_REGISTER_XXXXREAD_PORT_XXXXWRITE_PORT_XXXX棺莫搐棠完赴稼羌硫坛扰胜军堰捆舵博挨巡顺蛔皿钥妹恢青

46、弗酗晕铜乏轴设备驱动程序开发设备驱动程序开发中断架构中断架构l中断只是异常处理的一部分中断只是异常处理的一部分在内核代码中被获取在内核代码中被获取在恢复到用户态之间进行处理在恢复到用户态之间进行处理但是硬件是独立于操作系统的但是硬件是独立于操作系统的l lCE使用二阶段中断服务模式使用二阶段中断服务模式少量的代码进行中断的记录少量的代码进行中断的记录少量的代码进行中断的记录少量的代码进行中断的记录调度中断服务程序代码进行处理调度中断服务程序代码进行处理调度中断服务程序代码进行处理调度中断服务程序代码进行处理l l操作系统提供操作系统提供API来使能来使能IRQ信号,设置中信号,设置中断的优先级

47、,等等。断的优先级,等等。l l与硬件有关的操作在与硬件有关的操作在OAL,以及设备驱动代,以及设备驱动代码中进行。码中进行。商车扔赂费裕造搐猛筐挛泞话德猎椎褥顾构捂戳免店斋俱慑诗巩炸帐廓熊设备驱动程序开发设备驱动程序开发关于关于ISR与与IST的一些的一些 解释解释lIST是老的用户模式代码是老的用户模式代码有完整的有完整的CE .NET API与与CRT库库CE .NET调度程序根据线程的优先级控制调度程序根据线程的优先级控制IST的执行的执行运行态绑定到运行态绑定到SYSINTRl l从异常处理函数调用从异常处理函数调用ISR没有操作系统服务没有操作系统服务没有操作系统服务没有操作系统服

48、务堆栈空间大小有限堆栈空间大小有限堆栈空间大小有限堆栈空间大小有限可设置为可重入的可设置为可重入的可设置为可重入的可设置为可重入的 ( (在在在在OALOAL进行设置进行设置进行设置进行设置) )MIPS, SHxMIPS, SHx汇编语言汇编语言汇编语言汇编语言泥廓七蟹剔瞳纂蚁耿租院菩篇寞冀饥膨吠匡沏云埃精丢甘盖揣谈歹潘递郧设备驱动程序开发设备驱动程序开发ISRlIRQ 优先级的设定依赖于不同优先级的设定依赖于不同CPU的系统架构的系统架构在在x86上由上由PIC硬件进行设置硬件进行设置在在MIPS上用上用OAL的的IntrPriority, IntrMask 进行设置进行设置l l通过让通

49、过让通过让通过让ISTIST进程推断进程推断进程推断进程推断ISRISR服务,服务,服务,服务,OALOAL能够增加实时能够增加实时能够增加实时能够增加实时性。性。性。性。l l在在在在CE 3.0CE 3.0中中中中, ,所有的所有的所有的所有的ISRISR代码都是代码都是代码都是代码都是OALOAL的一部分的一部分的一部分的一部分没有特殊的扩展没有特殊的扩展没有特殊的扩展没有特殊的扩展IRQIRQ绑定到绑定到绑定到绑定到OEMInitOEMInit的事件的事件的事件的事件IDID没有支持没有支持没有支持没有支持PNP, PNP, 共享共享共享共享IRQ (PCIIRQ (PCI总线总线总线

50、总线) )l lCE .NET CE .NET 通过通过通过通过IRS(IISR)IRS(IISR)链解决了这些限制。链解决了这些限制。链解决了这些限制。链解决了这些限制。藉乾势辞梁研河邓杖阵戴犹跌就吉乒觅溯钮另检竹沟子围腻胎记熏租陛戳设备驱动程序开发设备驱动程序开发CE .NET 可安装可安装ISRlCE 3.0 ISR 架构的首选扩展架构的首选扩展lDLL 代码代码,在运行时进行绑定在运行时进行绑定l源代码可以是独立于源代码可以是独立于CPU的的一般用一般用一般用一般用C C编写编写编写编写有一些限制有一些限制有一些限制有一些限制 不能调用不能调用不能调用不能调用CRT, Windows

51、API, CRT, Windows API, 或其它的或其它的或其它的或其它的DLLDLLl l不可推断的不可推断的不可推断的不可推断的ISR,ISR,或或或或 IST IST发布发布发布发布l l支持硬件共支持硬件共支持硬件共支持硬件共IRQIRQ共享共享共享共享从同一个从同一个从同一个从同一个IRQIRQ关联的不同关联的不同关联的不同关联的不同SYSINTR IDSYSINTR ID套稗严贼赚平证给针潭秋剖换腥层相粟哆房毯盾沃谩蚂豫戏阵误白局诵泻设备驱动程序开发设备驱动程序开发I II IS SR R CE .NET中断处理中断处理内内核核OOA AL L驱驱动动硬硬件件设置事件设置事件异

52、常处函数异常处函数ISRISRPSRPSRSYSINTR_SYSINTR_IDIDSYSINTR_xxSYSINTR_xxSYSINTR_NOPSYSINTR_NOPISTISTIISRIISR1 1NKCallIntChain(IRQ)NKCallIntChain(IRQ)IISRIISRn nSYSINTR_CHAINSYSINTR_CHAINIISRIISR2 2襟攘诱挖彩产除栈选蘑栽晤液哨织寝型观廓粤急段响悉扫袜阻倦搓觅袁述设备驱动程序开发设备驱动程序开发中断服务线程中断服务线程l是内置设备的驱动程序的作户态线程是内置设备的驱动程序的作户态线程l进行实际的中断处理进行实际的中断处理l调

53、用调用CreateEvent 创建一个与逻辑中断相关创建一个与逻辑中断相关联的事件对象联的事件对象lIST在大多数时间里都是处于空闲状态,以在大多数时间里都是处于空闲状态,以内核用信号通知事件对象时被唤醒内核用信号通知事件对象时被唤醒lIST通常运行的优先级高于普通优先级,其通常运行的优先级高于普通优先级,其优先级由优先级由 CeSetThreadPriority函数设定函数设定胰蒂慰渝潮替亢哎觅最厉省瓷蜜染啦鸥赡食唤浮琼驰鲤嗡稻店鸣萎每压撮设备驱动程序开发设备驱动程序开发中断服务线程中断服务线程lInterruptInitialize调用调用InterruptInitialize将事件与将事

54、件与ISR的中断标识的中断标识符关联起来符关联起来l lWaitForSingleObject用来等待一个用信号通知的事件用来等待一个用信号通知的事件用来等待一个用信号通知的事件用来等待一个用信号通知的事件这一调用通常放在一个循环中,以使和中断处这一调用通常放在一个循环中,以使和中断处这一调用通常放在一个循环中,以使和中断处这一调用通常放在一个循环中,以使和中断处理时,理时,理时,理时,ISTIST可以回到这一个调用等待下一个要处可以回到这一个调用等待下一个要处可以回到这一个调用等待下一个要处可以回到这一个调用等待下一个要处理的中断理的中断理的中断理的中断l lInterruptDone中断数

55、据处理完以后,中断数据处理完以后,中断数据处理完以后,中断数据处理完以后,ISTIST必须调用必须调用必须调用必须调用 InterruptDoneInterruptDone函数函数函数函数使内核使能与这一个线程相使内核使能与这一个线程相使内核使能与这一个线程相使内核使能与这一个线程相关的中断关的中断关的中断关的中断鸵腑奢考监是今韵拜爷藩辩吾梢帖蛮宇仓阑脯诧拔川弱哈疾利禽锰菌膀锹设备驱动程序开发设备驱动程序开发典型的典型的IST启动启动struct ISTData / Declare the Strucure to pass to the ISTstruct ISTData / Declare

56、the Strucure to pass to the IST HANDLE hThread; / IST Handle HANDLE hThread; / IST Handle DWORD sysIntr; / Logical ID DWORD sysIntr; / Logical ID HANDLE hEvent; / handle to the event to wait for interrupt HANDLE hEvent; / handle to the event to wait for interrupt volatile BOOL abort; / flag to test

57、to exit the IST volatile BOOL abort; / flag to test to exit the IST;ISTData g_KeypadISTData;ISTData g_KeypadISTData;/ Create event to link to IST / Create event to link to IST g_KeypadISTData.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);g_KeypadISTData.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL

58、);/ Translate IRQ to an logical ID (x86 CEPC)/ Translate IRQ to an logical ID (x86 CEPC)g_KeypadISTData.sysIntr =Mapirq2Sysintr(5);g_KeypadISTData.sysIntr =Mapirq2Sysintr(5);/ start the thread/ start the threadg_KeypadISTData.hThread = CreateThread(NULL,0,&KeypadIST,g_KeypadISTData.hThread = CreateT

59、hread(NULL,0,&KeypadIST, &g_KeypadISTData, 0, NULL); &g_KeypadISTData, 0, NULL);乔桩锻咸出你兑磅单源纂溜状织席晚欺李罚寿参佳樊掖廖坡蛊捐之儿能锁设备驱动程序开发设备驱动程序开发典型的典型的IST启动启动/Change the threads priority/Change the threads priorityCeSetThreadPriority(g_KeypadISTData.hThread,0);CeSetThreadPriority(g_KeypadISTData.hThread,0);/disconne

60、ct any previous event from logical ID/disconnect any previous event from logical IDInterruptDisable(g_KeypadISTData.sysIntr);InterruptDisable(g_KeypadISTData.sysIntr);/ Connect Logical ID with Event/ Connect Logical ID with EventInterruptInitialize(g_KeypadISTData.sysIntr, g_KeypadISTData.InterruptI

61、nitialize(g_KeypadISTData.sysIntr, g_KeypadISTData.hEvent,NULL,0);hEvent,NULL,0);l设置设置IST的优先级的优先级l与以前的事件断开与以前的事件断开l与与ISR关联关联封涤床酞靠迪坯署剧碳敲前惯窑忆呈忻酵翱锤嗡嘱后功每晴耘巾贷皇洁灌设备驱动程序开发设备驱动程序开发典型的典型的IST启动启动DWORD KeypadIST(void *dat)DWORD KeypadIST(void *dat) ISTData* pData= (ISTData*)dat; ISTData* pData= (ISTData*)dat;

62、/ loop until told to stop / loop until told to stop While(!pData-abort) While(!pData-abort) / wait for the interrupt event. / wait for the interrupt event. WaitForSingleObject(pData-hEvent, INFINITE) WaitForSingleObject(pData-hEvent, INFINITE) if(pData-abort) if(pData-abort) break; break; / Handle t

63、he interrupt. / Handle the interrupt. / Let OS know the interrupt processing is done / Let OS know the interrupt processing is done InterruptDone(pData-sysIntr); InterruptDone(pData-sysIntr); Return 0; Return 0; 糕睡遣绚商女酷幽领朴盗娜毖茎边冤讣俗阀录迷此页郎馋耙淬朋逗掸须作设备驱动程序开发设备驱动程序开发典型的典型的IST结束结束/ set abort flag to true to

64、 let thread know/ set abort flag to true to let thread know/ that it should exit/ that it should exitg_KeypadISTData.abort =TRUE;g_KeypadISTData.abort =TRUE;/disconnect event from logical ID/disconnect event from logical ID/this internally sets g_KeypadISTData.sysIntr which in turn/this internally s

65、ets g_KeypadISTData.sysIntr which in turn/sets g_KeypadISTData.hEvent through the kernel/sets g_KeypadISTData.hEvent through the kernelInterruptDisable(g_KeypadISTData.sysIntr);InterruptDisable(g_KeypadISTData.sysIntr);/wait for thread to exit/wait for thread to exitWaitForSingleObject(g_KeypadISTDa

66、ta.hEvent,INFINITE);WaitForSingleObject(g_KeypadISTData.hEvent,INFINITE);CloseHandle(g_KeypadISTData.hEvent);CloseHandle(g_KeypadISTData.hEvent);CloseHandle(g_KeypadISTData.hThread);CloseHandle(g_KeypadISTData.hThread);l设置一个会导致设置一个会导致IST退出的标志退出的标志攀摘捉仿胶藏恭起厨赚逝中戊栗涨骡骗匀壕伶剔佛生色袒拄序及率讲约励设备驱动程序开发设备驱动程序开发总线驱动概

67、览总线驱动概览lPCMCIAI82365 (ISA)TI-1250 (PCI)l lUSB Host多主控制器多主控制器多主控制器多主控制器 OHCI OHCI 与与与与 UHCI (PCI) UHCI (PCI)锋判侠虫伶陈凑舌虫讳始坯谷锄愿创恨幻弄歹哉瓦佣砒锈一乞缩岗耗宫殉设备驱动程序开发设备驱动程序开发PCMCIA HostlPCMCIA总线驱动有三个主要的线程总线驱动有三个主要的线程 状态改变线程状态改变线程 (卡的插入与移除卡的插入与移除) 中断线程中断线程(处理卡的功能性中断请求处理卡的功能性中断请求) 回调线程回调线程 (通知事件相关的设备卡通知事件相关的设备卡) l l总线驱动

68、支持总线驱动支持总线驱动支持总线驱动支持Card ServCard Serv消息的一个子集,从回调消息的一个子集,从回调消息的一个子集,从回调消息的一个子集,从回调线程中用回调函数发送线程中用回调函数发送线程中用回调函数发送线程中用回调函数发送l l中断以回调的形式发送到客户端驱动中断以回调的形式发送到客户端驱动中断以回调的形式发送到客户端驱动中断以回调的形式发送到客户端驱动l l对新插入的卡进行扫描以确定是否对新插入的卡进行扫描以确定是否对新插入的卡进行扫描以确定是否对新插入的卡进行扫描以确定是否PnPPnP元组,并与元组,并与元组,并与元组,并与注册表中的相关项进行比较注册表中的相关项进行

69、比较注册表中的相关项进行比较注册表中的相关项进行比较l l如果没有发现相匹配的信息,则候选的驱动程序就如果没有发现相匹配的信息,则候选的驱动程序就如果没有发现相匹配的信息,则候选的驱动程序就如果没有发现相匹配的信息,则候选的驱动程序就运行与卡相关的运行与卡相关的运行与卡相关的运行与卡相关的“detect”“detect”例程对卡进行识别例程对卡进行识别例程对卡进行识别例程对卡进行识别可能显示出一个对话框询问可能显示出一个对话框询问可能显示出一个对话框询问可能显示出一个对话框询问DLLDLL的名字的名字的名字的名字婶乘汉迭膳溪岂保盈档匡膳帜而彦孰驮炳旦视契刹藏玖嵌茅鬃徐恒悯闯钓设备驱动程序开发设

70、备驱动程序开发USB Hostl兼容兼容USB 1.1版版l完全支持完全支持OHCI与与UHCIl支持所有的传输类型支持所有的传输类型Isoch, bulk, interrupt, controll lUSBDUSBD支持多个支持多个支持多个支持多个HCHC的复用的复用的复用的复用l l总线设备驱动典型地采用总线设备驱动典型地采用总线设备驱动典型地采用总线设备驱动典型地采用LoadDriverLoadDriver进行安装,进行安装,进行安装,进行安装,使用使用使用使用USBDUSBD操作与操作与操作与操作与HCHC进行通信进行通信进行通信进行通信l l总线设备驱动能可选地调用总线设备驱动能可选

71、地调用总线设备驱动能可选地调用总线设备驱动能可选地调用ActivateDeviceEx()ActivateDeviceEx()以以以以提供一个流接口给应用程序提供一个流接口给应用程序提供一个流接口给应用程序提供一个流接口给应用程序l l检测并识别新装设备检测并识别新装设备检测并识别新装设备检测并识别新装设备l l按照注册表中的描述安装驱动按照注册表中的描述安装驱动按照注册表中的描述安装驱动按照注册表中的描述安装驱动可能显示一个对话框询问可能显示一个对话框询问可能显示一个对话框询问可能显示一个对话框询问DLLDLL的名字的名字的名字的名字汀尽啸雨呢晌肥寄鳖沮怪犀头腿辱聊捂搂沽挠戒瞧挚软揩壹蜒睡付

72、鹤纪锋设备驱动程序开发设备驱动程序开发逗趟追滇碱谎啄肚慎蔽赢殴步隐铲蛤棚光劝熏植注拱俄豺峙菱尧吞酷蜡让设备驱动程序开发设备驱动程序开发OEM硬件硬件单块驱动单块驱动单块驱动单块驱动( (显示显示显示显示) )GWE 子系统子系统设备管理器设备管理器设备管理器设备管理器MDDMDDPDDPDDMDDMDDPDDPDDDDIDDIDDSIDDSIDDSIDDSI编程模型编程模型USB USB 总线设备驱动总线设备驱动总线设备驱动总线设备驱动USBDUSBDMDDMDDPDDPDD沪赡吊朴枕角钝黍颤遮纯悄矫减盅阂扩凉佩稀皂诞蠢后芭余禹胡鹿查沁粕设备驱动程序开发设备驱动程序开发主要内容主要内容l概述概

73、述l流驱动接口流驱动接口l设备驱动程序架构设备驱动程序架构lUSB mouse 驱动开发示例驱动开发示例lWindows CE 系统服务系统服务脆煮老杨叁茄梆江菲穷涝下唤鞍腾甄鱼完逻契国绸杀咆粒窘厉收于谦绵础设备驱动程序开发设备驱动程序开发USB 驱动传输类型驱动传输类型l控制传输控制传输USB 打印机打印机, USB数码相机数码相机l l同步传输同步传输USB USB 网络电话网络电话网络电话网络电话l l中断传输中断传输鼠标鼠标鼠标鼠标, ,键盘键盘键盘键盘, ,游戏控制器游戏控制器游戏控制器游戏控制器l l批量传输批量传输USB USB 相机相机相机相机齐爪放嚼而碳匪糊瓷幼蓉授邢匣剩栏轰

74、强酱僳舱涅袋微爪拾吸宣蹬贯钎十设备驱动程序开发设备驱动程序开发必须的入口点必须的入口点lUSBDeviceAttach当设备挂接时,当设备挂接时,USB驱动模块调用这个函数驱动模块调用这个函数l lUSBInstallDriver当一个不明设备挂接到当一个不明设备挂接到当一个不明设备挂接到当一个不明设备挂接到USBUSB上时,上时,上时,上时,USBUSB驱动驱动驱动驱动模块调用这个函数模块调用这个函数模块调用这个函数模块调用这个函数l lUSBUnInstallDriver总线设备驱动能调用这个函数从总线设备驱动能调用这个函数从总线设备驱动能调用这个函数从总线设备驱动能调用这个函数从USBU

75、SB驱动注消驱动注消驱动注消驱动注消盘蓖银甚秃纽炽鸟剃毁靖潞咱符症雹勇垒战鼎灵列凌疑优朱桅匣族品吾珍设备驱动程序开发设备驱动程序开发USB鼠标模型鼠标模型usbd.dllUSB鼠标驱动鼠标驱动硬件硬件应用应用寡跺或匀啥坟悬旬午匙捕猴黔石枉兼雁葫拳耽略兑硬垄杖谩攘省嚎弹歌虽设备驱动程序开发设备驱动程序开发演示演示:USB鼠标驱动代码鼠标驱动代码陨酮唆袍圈葱插掌受妇辆迪焙撕座锈宜人撩讥玉涝拱找跨弥拍嘿桓采负哨设备驱动程序开发设备驱动程序开发主要内容主要内容l概述概述l流驱动接口流驱动接口l设备驱动程序架构设备驱动程序架构lUSB mouse 驱动开发示例驱动开发示例lWindows CE 系统服务

76、系统服务拆删丛市厌韧蛮太吻锑很近舶责乘涝穴响贫迈攫洛疾殆酝建质紊棉蝴深聊设备驱动程序开发设备驱动程序开发系统服务的概念与历史系统服务的概念与历史l在在Windows CE 4.0以前以前,没有系统服务没有系统服务l所谓的所谓的 “设备驱动设备驱动”被写成一个工作区被写成一个工作区l在在Windows CE 4.0以后以后,引入了系统服务引入了系统服务管理器管理器谷哨聪纸及霖载后蒋臃姆段发挡剪掩鸽柬目荔喜耗锗虽装偿酒础喊联娟浊设备驱动程序开发设备驱动程序开发系统服务注册系统服务注册柬粳凰尽廷驴族判忌脯响诡私帕跃毗凤箔贾烈些悸贞跋慎削球裳普咙寓瓷设备驱动程序开发设备驱动程序开发系统服务体系架构系统

77、服务体系架构lCE的系统服务是一个的系统服务是一个DLL,这个,这个DLL的构的构建几乎与流设备驱动一模一样建几乎与流设备驱动一模一样l与流设备驱动一样,与流设备驱动一样,Windows CE系统服系统服务提供同样的务提供同样的10个入点口,从个入点口,从xxx_Init到到 xxx_PowerDownl系统服务有三个前缀字符系统服务有三个前缀字符锰弹唐哥班尖敏吁沪听炮揽吩歧堤入最彝鼠隙蹋怎迄贬视笋棘芋表职阉扔设备驱动程序开发设备驱动程序开发系统服务系统服务IOCTL命令命令lIOCTL_SERVICE_STARTlIOCTL_SERVICE_STOPlIOCTL_SERVICE_REFRES

78、HlIOCTL_SERVICE_INSTALLlIOCTL_SERVICE_STATUSlIOCTL_SERVICE_SUPPORTED_OPTIONS惨疼比骨合盒搜胃捏迟舞民坐鲤攒亢滥眩骨矢患琼夷芬便甥尽辖别嗓着密设备驱动程序开发设备驱动程序开发系统服务的应用控制系统服务的应用控制lActivateServicelRegisterServicelGetServiceHandlelServiceIoControllDeregisterService待晨随矮革纪多字絮洗灼匀且酌乌后销腆获呀艘陀私得窑躬然舍赤童蛙劫设备驱动程序开发设备驱动程序开发作业作业读读Service.exe的在线帮助,自已实现关于的在线帮助,自已实现关于 Windows CE 的系统服务。的系统服务。 应用程序发送应用程序发送I/O控制命令,然后服务例程将控制命令,然后服务例程将当前时间写到日志文件当前时间写到日志文件巧实肢贱蚕乃拭突扣沛刊貉饥雄瘁痞翻指慎跨突鲍尾般帐维促溉栋扎坚衙设备驱动程序开发设备驱动程序开发

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

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