一、总述 1.1分类 驱动程序按操作系统平台可分为两大类:Windows 系列与 Linux/Unix系统。而在Windows平台中又包含两大类:VxD(Virtual X Device)与WDM(Windows Driver Model),前者运行于Windows 3.1/95/98/ME,后者运行于Windows 98/ME/2000/XP。Windows NT4.0平台上的KMD驱动程序仅比WDM少了能量管理与即插即用功能而矣。当然,在Windows 2000平台上的驱动程序除WDM外,还有文件系统驱动、NDIS(Network Driver Interface Specific)驱动等等其它类型的驱动程序,但在下面的书籍推荐与介绍中我们将主要围绕WDM进行。 1.2 目的 我首先想问你:你为什么准备学习开发驱动程序?也就是说你学习开发驱动程序的目的是什么? 从事驱动程序的开发可获得较高的收入。那么让你失望了。这行业同其它IT行业一样,收入高的属于少数技术水平高与开发经验丰富的人,虽然作驱动开发的人少,与你竞争的人也少,但相应的就业面(也就需求)也相对狭窄。 我是个硬件工程师,仅仅想作个驱动来调试硬件。那你可以学习使用WinDriver这个软件工具,它简单易用,上手快,对内核知识不需很多。只是据说效率上欠缺一些,不过我没具体测试过。 老板让我作个驱动程序;我想通过学习驱动程序开发了解操作系统;……好像也不需要这么多理由吧,那就让我继续吧。 1.3 开发环境的建造 首先安装好Windows操作系统; 然后安装VC(Virtual C++),一般来说需要VC6.0版本,好像最新的XP DDK不需要事先安装VC,但我没试过; 如果是Windows NT4.0,还需要安装Platform SDK; 然后到微软的网站下载相应的DDK(Driver Development Kits)开发包,比如你安装的是Windows 2000,你就一定只能安装2000DDK。不过,最新的XP DDK可不提供免费下载,只在MSDN中提供,微软总是不忘记赚钱。 最后,为调试方便,最好安装SoftIce,这个第三方软件支持单机调试,如果使用微软提供的WinDbg,还需要两台机器进行调试。 有些人还想安装Numega公司的Numega DriverStudio套件,我倒不太喜欢其中的DriverWork,它实际就是把DDK重新封装了。反而影响我们对程序流程的理解与调试。 - 14 -
Austin Ji
初学驱动开发书籍介绍
1.4 编写驱动程序的原则 大部分编程问题都不得可分成两部分:机制(mechanism,即需要提供什么样的功能)与策略(Policy,如何使用这些功能)。程序员编写驱动程序时就特别注意:编写访问硬件的内核代码时不要给用户强加任何策略。因为不同的用户有不同的需求,驱动程序应该处理如何使硬件可用的问题,而将怎样使用硬件的问题留给上层应用。(--摘自《LINUX设备驱动程序》) 1.5 计算机已知的挑选原则 现在计算机书籍种类非常多,也是良莠不齐,我一般在挑选本着下面几条原则: a. 尽量选用外国人写的书。也不能说是崇洋媚外,毕竟我们现在所使用的操作系统基本上都是老外们编写的,那当然他们将自己的经验写出来也比我们丰富一些吧。还有就是中国人实在不争气,常见中国人写的书由“某某 编著”,这一个“编”字就可以到处Copy & Paste。 b. 选用有名的出版社。国内的机械工业出版社、清华大学出版社等等,国外的如微软公司、O’Reilly等 1.6 购买方式 常有人想买某本书却买不到,或是到书店没看到此书。其实现在完全可以到网上买书,挑选方便快捷,品种丰富齐全,而且一般都有优惠,只是你若在小城市,从寄出货款到拿到书可需要点耐心,想当年我可是等了足有两个星期。具体的网址自己上网查询,省得有广告嫌疑。 - 14 -
Austin Ji
初学驱动开发书籍介绍
二、推荐的书目 2.1 《C程序设计》 我首先推荐的就是这本谭浩强的《C程序设计》,如果你的C语言非常熟练,那么你就跳过这一节,否则的话,你还是从你的教科书中找出这本,再仔细读两遍。一本书写出来十多年还有人用,这可是在IT技术更新换代飞速的年代,能作到这一点也足可见它的经典。虽然安装时需要VC,但在编写驱动程序时却用的是Ansi C,还不是C++,也不需要VC的集成开发环境。当然你也可以为方便使用VC的集成开发环境,并将代码封装成C++。 C程序设计(第二版) 出版社: 清华大学出版社 译作者: 谭浩强 国标编号: ISBN 7-302-03806-6/TP.2205 出版日期: 1999年12月 定价: RMB 26.00 页数: 388 内容简介: C语言是国内外广泛使用的计算机语言,是计算机应用人员应掌握的一种程序设计工具。 本书第一版于1991年出版,全书针对初学者的特点,精心策划、准确定位、概念清晰、例 题丰富、深入浅出,受到专家和读者的一致好评。普遍认为它是学习C语言的好教材,被全国大多数高校选用。几年来发行量达270万册,创同类书发行量的全国纪录。被电子工业部评为部级优秀教材一等奖。 根据发展的需要,作者对本书进行了修订,加强了算法,按C的新标准改写全书各章,增加了C++的初步知识。 本书内容新颖、体系合理、逻辑性强、文字流畅、通俗易懂,是学习C语言的理想教材。凡具有计算机初步知识的读者都能读懂本书。本书可作为高等学校各专业的正式教材,也是一本自学的好教材。 评论: 想必是大家C语言的教科书吧,大家都知道内容的,我也就不多评论这本书,但我想这本书的发行量在世界的电脑科技书刊界上都应该是前十位吧,要知道谭浩强的《BASIC程序设计》可是世界上科技书刊发行量最大的。 备注:“内容简介”是原书自带的内容介绍,“评论”才是我作出的评价。 - 14 -
Austin Ji
初学驱动开发书籍介绍
2.2 《Windows 2000内部揭密》 有时怨不得作Unix/Linux的人瞧不起作Windows的人,因为前者对操作系统的了解比后者更为深入一些。随便翻开一本Linux开发的书籍,上面就有关Cache、文件系统、IPC(进程间通信)等等内容,而Windows这方面的书籍是少之又少,大概与Microsoft的绝不公开源码有关,而能写得通俗易懂又这么精彩就更少了,很幸运,我们找到了这本书。如果你英文流利的话,最好看原版书Inside Microsoft Windows 2000 , Third Edition。 Windows 2000内部揭密 出版社: 机械工业出版社 译作者: (美)Mark E.Russinovich著 詹剑锋等译 国标编号: ISBN 7-111-09100-0/TP.2018 出版日期: 2001年10月 定价: RMB 69.00 页数: 568 内容简介: 本书深入揭示Windows 2000内部结构和运行机制,涉及Windows 2000最基础的系统组件和基本概念。主要内容包括系统体系结构、系统机制、管理机制、内存管理、安全机制、I/O系统、文件系统、网络体系等。本书用大量实验展示了Windows 2000的内核,有效地使读者深刻地理解Windows 2000系统,充分利用该系统进行应用开发。配套光盘包含本书电子版,以及展示Windows 2000内核的工具。 评论: 作为编写上层服务或是界面程序的Programer,你可以不了解操作系统内的机制与流程,但你是在编写驱动程序,是工作在Ringe 0,你的Bug会导致系统的崩溃,所以你必须掌握(至少也要了解)Windows系统的知识。 这本书对内存管理、I/O系统、高速缓存、文件系统、网络等作了详细的描述,由于Windows本身的封闭性,能这么详实、准确地介绍Windows 2000操作系统的内部的书真是少有。虽然这里没有哪一章是单独介绍驱动程序的,但实际它无处不在,特别是在I/O系统这章介绍得更为详尽。 当然,这本书不是教你如何编写程序的,所以此书基本上没有代码实现的例子,但它教你使用几种工具来观察、调试内核。
2.3 《Microsoft Windows 驱动程序模型设计》 这本书太经典了,虽然价钱上是贵了一点,但你多读几遍,就会发现物超所值。要知道它的实际作者是Walter Oney(个人网站www.oneysoft.com),他写的书从来都不会让人失望的。据说在今年年底,他将出版本书的第二版。 - 14 -
Austin Ji
初学驱动开发书籍介绍
Microsoft Windows 驱动程序模型设计 出版社: 北京大学出版社 译作者: Microsoft公司 国标编号: ISBN 7-900629-34-3/TP.28 出版日期: 2000年9月 定价: RMB 98.00 页数: 626 (1CD) 内容简介: 本书是《微软编程圣典丛书(影印版)》之一,讲述Windows 98和Windows 2000下的驱动程序模型设计,内容涉及WDM、内存和数据结构管理、注册和文件访问、多任务和多处理器环境中的驱动程序开发、I/O处理、设备读写、WMI、USB体系结构下的设备驱动程序开发等。为了增加本书的实用性,特以配套光盘的形式提供了丰富的程序实例、驱动程序创建向导、处理即插即用和电源管理中的细节问题的库,以及本书的电子版。 本书由微软公司组织专家编写,具有相当的技术深度,是中、高级程序员必备的参考书。 评论: 这本书堪称经典之作,详细介绍了关于WDM驱动程序的方方面面,由浅及深地讲述了驱动程序中的I/O Request Packet、即插即用、读/写数据、能源管理等,并用专题讲述过滤驱动程序、日志、定时器、USB及驱动程序的安装/卸载等内容。在结合代码讲述时,也不象有些书一附代码就是几十页,他一般是一段代码不超过一页,对这段代码的解释往往不止一页。 这么说,这本书既可是菜鸟级人物的快速上手的教科书,也可以是高手的速查手册。 对了,还忘了这本书所附光盘上的一个非常非常好的东东WDMWiz.awx。你是不是要问这个有什么用?有不少初学者不喜欢nmake式的命令行编译,也有初学者不知怎么样才能构造驱动程序的框架,用这个东东,就可以在VC这个集成开发环境中象开发一个界面程序一样,一步步按照你的需要搭建出一个驱动程序的框架,而且就在VC这个IDE中就可以编译了。 要说这本书有什么不足,那就是他没包含文件系统驱动与网络驱动(NDIS),还有就是它是 In English(不过,网上有人翻译成中文)。 - 14 -
Austin Ji
初学驱动开发书籍介绍
三、一般驱动开发书籍 下面这几本书籍专讲WDM驱动程序的,写得都还可以,虽然并不十分出色,但也不算差。而且他们所讲述的内容大同小异,所以,你只要拥有其中的一本或是两本就足够了。 3.1 Windows 2000设备驱动程序设计指南(原书第2版) Windows 2000设备驱动程序设计指南 出版社: 机械工业出版社 译作者: [美]Art Baker,Jerry Lozano著 施诺等译 国标编号: ISBN 7-111-09283-X/TP.2077 出版日期: 2001年9月 定价: RMB 58.00 页数: 359 (1CD) 内容简介: 本书全面讲述了驱动程序模型、内核模式编程和硬件接口等方面的知识,可作为驱动程序开发的自学教材使用。全书共分17章和三个附录,第1-5章讨论编写设备驱动程序所需的基础知识。包括Windows 2000体系结构,Windows 2000 I/O管理程序等内容。第 6-13章是本书的核心内容,讨论了Windows 2000驱动程序开发的所有内容。第14-15章讨论设备驱动程序构造方面的高级主题,包括使用系统线程、分层、过滤和驱动程序类别等。最后两章讨论驱动程序的安装和调试。附录部分讨论了驱动程序开发所需的参考信息,列出了Windows 2000符号文件安装、故障检验码等内容。 评论: 这本书是《Windows NT设备驱动程序设计指南》的第二版,只是增加了PnP与能源管理方面的内容,其余的章节对原有内容改动不大。这本书较适合初学者,方方面面的内容都讲了一些,从硬件的基础知识、内存分配到全双工、定时器、日志记录,甚至还包括如何测试、调试与安装驱动程序。 特别是其中一章:高层驱动程序,详细讲述了在分层驱动中高层驱动程序如何工作以及如何与下层驱动通信,这些对过滤驱动也是极有帮助的。而在其它书上这点讲述得较为简单。 但在内容叙述上不够系统,组织结构有点乱,部分内容也不够深入,而且还有点小错误。 - 14 -
Austin Ji
初学驱动开发书籍介绍
3.2 WINDOWS NT与WINDOWS 2000设备驱动及开发 WINDOWS NT与WINDOWS 2000设备驱动及开发出版社: 电子工业出版社 译作者: [美]Peter G.Viscarola等著 新智工作室译 国标编号: ISBN 7-5053-5953-3/TP.3118 出版日期: 2000年6月 定价: RMB 60.00 页数: 490 内容简介: 本书从结构设计和实用的角度出发,对Windows NT和Windows 2000的标准核心模式驱动程序做了深刻描述。它不仅解释了如何设计和开发这些驱动程序,而且介绍了怎样去编辑、连接和编译它们。 本书将重点集中在标准核心模式驱动程序上,从简单的并行或串行端口设备驱动到复杂的以DMA为基础的实时视频加密设备驱动,本书介绍的标准核心模式驱动程序都是首屈一指的。全书有四大部分,第一部分介绍了Windows NT的结构,第二部分详述了管理器及设备驱动程序,第三部分叙述了替换式NT驱动程序结构,第四部分主要介绍了Windows 2000与NT4.0设备驱动程序的差别 评论: 呵呵,这本书实在不好评论。因为我没有那么多money买这么多书,只好听听大家的评价,我以后再补上吧。 据说写得不错,就是翻译得不好。
3.3 WINDOWS WDM设备驱动程序开发指南 WINDOWS WDM设备驱动程序开发指南 出版社: 机械工业出版社 译作者: [美]Chris Cant 译:孙义 马莉波 国雪飞 国标编号: ISBN 7-111-07709-1 出版日期: 2000年1月 定价: RMB 56.00 页数: 403 - 14 -
Austin Ji
初学驱动开发书籍介绍
内容简介: 本书主要介绍Windows 98和Windows 2000新的驱动程序模型(WDM)。描述了WDM设备驱动程序的结构、功能和开发方法;通过实际的设备驱动程序例子,说明WDM设备驱动程序的实现技术、测试和调试方法;介绍了本书提供的一个调试软件DebugPrint;说明如何在客户驱动程序中使用USB驱动程序接口(USBDI)访问USB设备,以及如何利用HID类驱动程序以标准方法访问多种输入设备。 评论: 这本书一般化吧,一时我也想不起他有哪点特别好的地方。
3.4 Windows设备驱动程序(VxD与WDM)开发实务 Windows设备驱动程序(VxD与WDM)开发实务出版社: 电子工业出版社 译作者: 武安河 周利莉 国标编号: ISBN 7-5053-6924-5/TP.3943 出版日期: 2001年9月 定价: RMB 36.00 页数: 300 (1CD) 内容简介: 本书主要介绍了用VtoolsD开发Windows 95/98/Me下的非标准设备(指自己开发的,如数据采集卡等设备)驱动程序VxD的原理及编程方法。本书详细介绍了VxD的基本概念、VxD程序、VxD和Win32应用程序之间的通信,及VxD访问硬件设备,处理硬件中断,实现DMA操作,完成即插即用(PnP)功能的函数和类库,并详细介绍了VtoolsD开发工具的使用和如何用VtoolsD开发Windows下的PCI设备驱动程序VxD。 本书还介绍了用DriverWorks开发Windows 98/NT/2000下的驱动程序WDM的原理及编程方法。 本书附有大量的编程实例,并附赠一张光盘,内含全部实例源代码便于读者学习和掌握 评论: 有不少初学者是用DriverWorks开发驱动程序的,而上面介绍的都是直接用DDK开发的。这本书就是教你如何使用Numega DriverStudio开发套件中的VtoolsD与DriverWork开发PCI卡驱动程序。 - 14 -
Austin Ji
初学驱动开发书籍介绍
四、相关推荐书目 4.1 Windows 核心编程 虽然叫核心编程,并不是指在内核模式(Kernel Mode)下编程,还是在用户态(User Mode)中,不过比较贴近底层的编程。其实它与驱动程序编程并无紧密的关系,之所以推荐,是因为有部分程序员是要将驱动程序、API(Appplication Program Interface)、测试程序一套都要作下来,那么这本书对你编制API就大有帮助。 WINDOWS WDM设备驱动程序开发指南 出版社: 机械工业出版社 译作者: (美)Jeffrey Richter著 王建华等译 国标编号: ISBN 7-111-07945-0/TP.1427 出版日期: 2000年5月 定价: RMB 86.00 页数: 689 内容简介: 本书是讲解Windows操作系统内部机制的专著,作者从基本概念入手,全面系统地介绍了Windows的各种基本构件,如进程、线程、DLL和内存管理等,并列举了大量应用程序,精辟地分析了构件的使用方法,为掌握Windows编程技巧提供了一条有效的捷径。对于不同水平的Windows编程人员来说,本书都具有极好的参考价值 评论: 一般客户都需要对硬件的并发处理,有时可在驱动程序内解决,但有时驱动程序内不好处理时,就需要上层应用程序来处理。好好看看此书关于进程、线程、互斥、事件等概念的描述,再来解决时就可以得心应手了。 再结合前面几本书中讲述的Windows内核层的运行机制,认真思考本书应用层中的内核对象、进程、线程等知识,相信你会对Windows将有更深一层的理解。 本书中还专有几节讲述使用DLL(Dynmic Linked Librea)技术编写API。 - 14 -
Austin Ji
初学驱动开发书籍介绍
4.2 LINUX设备驱动程序(第二版) LINUX设备驱动程序(第二版) 出版社: 中国电力出版社 译作者: ALESSANDRO RUBINI等著 魏永明等译 国标编号: ISBN 7-5083-1294-5 出版日期: 2002年11月 定价: RMB 69.00 页数: 565 内容简介: 本书面向的读者是那些想在Linux操作系统下支持各种计算机外设,或者想开发新的硬件并在Linux下运行的人们。Linux是Unix市场中增长最快的部分,并且在许多应用领域获得了广泛的支持。现在,人们越来越清楚地认识到Linux是嵌入式系统的一个极佳平台,本书第二版已经成为该领域的经典之作。本书作者将以往那些口述式的经验和知识、或者隐晦的源代码注释上升为系统地讲述各种设备驱动程序编写方法的著作。 Linux内核的2.4版在设备驱动程序方面发生了重大变化,它简化了许多工作,但同时提供了许多精细的新功能,可让驱动程序更加高效、灵活。本书第二版透彻地讲述了这些变化,并介绍了许多新的处理器和总线结构。 评论: 我没有搞错,虽然你是作Windows下的驱动程序,但驱动程序对硬件的操作都是相同的,只是各平台驱动程序的结构有区别罢了。而且Linux下有大量的驱动程序源码可供参考。 一般来讲Linux的书籍都比同类的Windows的书籍更为底层一些,这本书也不例外,它对硬件知识也涉及到不少,比如PCI、ISA总线等等。 所以说,这本书对你理解操作系统与驱动程序的关系、驱动程序与硬件的关系有很大的帮助。 最后,很有可能老板就对你说:Windows 系列的驱动程序写好后,再把Linux、SCO Unix的驱动程序也写一下吧。 - 14 -
Austin Ji
初学驱动开发书籍介绍
五、烂书曝光 既然好书,就有烂书。我这个“烂”字并不是说它真的很差,误人子弟,只是形容与他的价钱相比,不能作到物有所值。 5.1 Microsoft Windows 2000驱动程序设计指南 这本书狂贵,还有它的中文翻译版,分成上下册,价格就更是高达300多元。 Microsoft Windows 2000驱动程序设计指南(影印版) 出版社: 北京大学出版社 译作者: Microsoft公司 国标编号: ISBN 7-900629-08-4/TP.09 出版日期: 2000年6月 定价: RMB 228.00 页数: 1742 内容简介: 本书是《微软Windows 2000驱动程序开发丛书(影印版)》之一,讲述编写Windows 2000与Windows 98驱动程序所需的各种技术。主要内容有:驱动程序开发环境与驱动程序BUILD实用程序,应用Windows 2000驱动程序检验器建立、测试和调试Windows 2000驱动程序,创建WDM驱动程序,Windows 2000特殊的即插即用和电源管理特性,如何支持设备的设置和安装,以及编写内核模式、图形和网络驱动程序。 本书由微软公司的专家编写,技术深入,权威性强,是Windows 2000驱动程序开发人员必备的参考书。 评论: 如果你想显示你知识的“渊博”,或你感觉你的手腕和肩膀酸痛,那你可将它置于案头,每有人路过你的办公桌时,总会注意到这本厚达150mm的书籍,看到里面满篇的洋文,他总会别样的目光看看你;而且在你劳累时,还可把它当哑铃锻炼身体。 仅从它的目录看,会发现它的内容既广泛又详实,又是Microsoft出版的,但我为什么会上面那样说呢,因为它的内容简直就是DDK文档的翻版,不信你再将它的目录与DDK文档的目录对比。忘记告诉你,以上两个目的的前提是:你是公款购买。 结论:MicroSoft出版的书也不全是经典的,这本就是垃圾。 - 14 -
Austin Ji
初学驱动开发书籍介绍
5.2 VC++.NET开发驱动程序详解――Windows 2000/XP VC++.NET开发驱动程序详解 ――Windows 2000/XP 出版社: 北京希望电子出版社 译作者: 郭益昆 国标编号: ISBN 7-900088-76-8 出版日期: 2002年4月 定价: RMB 42.00 页数: 360 (1CD) 内容简介: 本书是一本介绍Windows 2000 Professional和Windows XP的核心驱动程序的专著。提供了多种核心程序模型,极大地方便了读者的学习和应用。 本书内容由6部分组成,第1部分为核心模式基础,主要内容有系统与驱动,对I/O、I/O对象和IRPs进行分层、调度方法和优先级、系统定义的对象与驱动的关系、基本驱动结构。第2部分为核心流驱动,主要讲述了核心流驱动的概念、流小驱动、音频驱动、音频小端口驱动、视频捕获驱动以及DVD驱动模型设计。第3部分为即插即用,主要内容有PnP需要的驱动支持,增加新PnP设备的步骤。第4部分为电源管理,包括电源管理的含义及其实现步骤。第5部分为Windows 2000的管理机制。第6部分为调试与开发驱动程序,介绍了10个调试工具以及如何使用VC++.NET开发驱动程序。 本书结构清晰,逻辑严密,内容环环相扣,不但是从事用VC++.NET进行开发与应用的广大编程人员的技术指导书,同时也可作为大专院校计算机专业、非专业师生重要的参考读物。 本版CD为驱动程序源代码。 评论: 一看书名就知道此书不会有多好。一般来讲,开发驱动与VC的联系并不多,只是借用了VC的连接器与编译器(若是98DDK或95DDK编译VxD驱动时,可以不用VC,而用Borland C++来替代,如果是XP DDK那就连VC都不需要了),所有的DDK对VC的版本要求最高也就是VC6.0,没有特别要求VC.Net;我也没听说使用VC++.Net编译驱动可以增添某些新功能或是有什么优势,那明显这是一本跟风书。 实际上也是,我那天到东方书城初看到这本书就翻了翻,好象还不错,但越看越觉得似曾相熟,不知为什么总感觉象是《Windows 2000 驱动程序模型设计》的某些章节的翻译。 结论:有机会在书店里翻一下就可以了。 - 14 -
Austin Ji
初学驱动开发书籍介绍
六、后记 总有些初学者问:看些什么相关书籍才好呢?去年就在DriverDevelop.com上简单地写过一个书评,可惜后来的一次事故造成该帖子丢失,然后就决心重写一次。尤其是前一阵子,对于论坛里的帖子我都没怎么回答过,甚是惭愧呀,就用这个补过一下吧。 对于此篇文章,你若有不同看法,或是想纠错,或是想润色一下,就与我联系吧。 Email: [email protected] 或是在www.DriverDevelop.com的论坛上联系Blue 版本V0.1 于Apr 23, 2003 - 14 -
Austin Ji