我的DDK学习经验(转载)[1]

[入库:2005年8月18日] [更新:2007年3月24日]

本文简介:选择自 vcbear 的 blog

这篇文章在无数技术网站都找的到。我在这里发这篇文章的原因:

1。这篇文章实在很好。别说作者倾情的介绍了自己的经验和感想(尤其是关于“钱途”的感想),里面介绍的一些书,真够有志开发驱动程序的同志看半辈子了。

2。我搜索了文档中心,没有发现这篇文章。

3。我现在需要参与分给我的帖子加分(可用分700多可是参与分没有了),大家多多点击  :)

》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

我的ddk学习经验
转载辅大美少女梦工场bbs站

自从97年1月我在program版post鼓励有心网友学习window device driver以来,陆续收到一些人询问如何下手.现在我已没时间玩bbs,因除了3d显示卡driver要tune外,还被派去做一些杂7杂8的事情.趁教师节比较有空,写下这封我学习ddk的经验,如果那站的站主觉得对网友有帮助,就尽管利用,不用客气.但需注明出处,并严禁有任何谋利举动(如剽窃修改后,来赚取稿费),曾对一些网友提出如何在mfc中用i/o port function的问题,回答了6次,让我觉得很烦烦烦烦烦烦,希望这种情况不在发生.

本文供分3段:(1)为何我要学ddk (2)学习ddk的过程 (3)未来可能的发展.

(1)为何我要学ddk.

我是资讯科班出身,就读过交大计工,清大资研.历经78,79股市狂飚,退伍后,认为写程序没什么前途,也无法撑到38岁.但mba却是越老人脉越多,收入也越多,所以进资策会,一面工作一面准备gmat,但没申请到理想的学校,而考外贸协会的人才培训班,在复试时也被刷下来.最后认命乖乖学window 3.1,第一年做多媒体资料库专案,当时连vc++ 1.0都还没出现,就用borland c++ 3.0以纯sdk方式coding,(因不知道有owl这种东西)事后想起来真是因祸得福,让我更了解window底层的运作(不过当时真的觉得很干).

第二年做video editor是我比较快乐的时光,vc++ 1.0刚出来,但市面没一本相关书籍,连msdn也一样.怎么办?到处找不到资料.最后用最笨的方法:用debuger trace mfc source code!, 然后搭配video for window 1.1版sdk来coding,当时傻傻得,以为可以做个video editor跟友立拼,所以常常加班到10点,但后来video editor结案后就放到储藏室,而aldus被adobe并购,友立也把photostyle卖给adobe.这件事件让我得到个教训:套装软件不好做,更难与国际大厂同类型产品竞争.因有时video editor会利用mci command来控制avi/fli播放,但觉得很奇怪,那个mci driver到底在搞什么鬼?在好奇心驱使下,翻msdn的multimedia device driver来看,才搞懂mci driver如何与底层的video/audio driver沟通.

第三年是最黑暗的时期,team leader包个multimedia title来做(还曾打算向敦煌科技包game来做).美工,企划,全和在一起,而要我用director 3.0的lingo语言来写title的program.我便开始消极抵抗,同时自己偷偷用mfc+wing+32bit assembly在win3.1上写个类似director3.0的engine. ui及绘图引擎都完成,而且播放速度比director 3.0还快.但卡在不知道如何设计script及interpreter.最后只好做罢.然而转捩点就发生在这一年:应台北电脑工会之邀,开门"windows影音驱动程序剖析"课程而与童子贤先生有一面之缘(当副总的他竟跑来上我这无名小卒的课),也保留他一张名片.另外帮别人写motion control card的dos driver来用在cnc上,对driver开始发生兴趣,原来写driver的利润颇丰.

第四年,黑暗的日子终于过去.参与ibm visualage for basic的visual component开发,用visualage for c++ 3.0来coding,过了一段无任何相关资料的日子,还好从李维那拿到openclass source code,发挥tracing的精神,终于顺利结案.这年在某电脑展中遇上任职ibm的大学同学,被他讥笑还在米仓中当米虫,让我心理不好受.也使我思考,只会coding的我未来要何去何从,难道要过着一年换一个专案的日子吗?然后40岁时会变成怎样?(petshop boy的"being borning"在我脑中响起...).

幸好碰上一个影响我很大的同事,他那时也刚帮人写完一个window 95的vxd,于是向他讨教,并学得如何收集相关资料,练好后就接个a/d,d/a卡的win31/95 driver case来做,写完win95觉得不过瘾,便拿nt4.0 ddk来看.另外他有事没事拿asis电子周刊给我看,当时正报导pc97的specification:acpi,agp,onnow等新技术,我看完就知道大好机会来了.凭做a/d, d/a卡window driver的经验,我知道随着win95的普及,这些硬卡没有win95 driver根本很难卖到欧美.pc97规定了intel的硬件设计如何跟microsoft的window做结合,而接口就是window driver!,加上主机板厂养的软件工程师只会写bios or 8051,对window driver根本是听都没听过,但pc97,98是必走的道路,所以一定要找到会的人来做.

而这时候我又要换另一资料库相关的专案(我最讨厌做mis,成天与数据,报表奋战,有够无聊).于是上网路找工作,想到手头的童子贤名片,就试投华硕看看.没想到一试便上,(不过在面试时被嫌在资策会待太久,恐染上不良习性).进华硕后,感觉到是right man in right place.终于可以一展抱负,有明确的目标,不再虚度时光,也不会被别人嘲笑是米虫.更重要的是有成就感,想想做的专案,是要卖到全世界的产品,而且是与一些国际大厂竞争产品上市时间.再也不是作完往仓库一摆的东西.再者华硕目前员工人数少,业务扩展迅速,加上公司高级领导阶层非常重视研发实力,只要有能力的人,不怕没升迁机会.不像宏基已有太多员工,没什么表现能力的机会,且升迁管道太挤了

(2)学习ddk的过程

要学ddk首先要把window的底层基础练的扎实.但一般人对学window sdk都视为畏途,更何况是底层的东西.从win31到win95变化比较多得,我个人认为是:multitasking,plug&play,memory addressing.有人问我说,memphis都快出来, 还要花功夫看win95 or win31吗?, 我认为还是要!原因是:

a.memphis不是完全重新改写,里面的一些观念还是沿用win95.
b.目前市面上尚未有大师级的memphis相关书籍,如果有也只是趁火打劫类型的书,而台湾的书商,作者最会搞这种把戏来a钱.如win31/95方面已有一些大师的书籍,如andrew scrullman,patt metrick,richard jeffery,walter o'ney,charle patzold等大师.你不去看大师级的书,反而去看"快快乐乐学memphis","教你21天学会memphis"这类垃圾书,真是在浪费你的时间及金钱.

学ddk的第一步准备功夫是把英文阅读能力练好,你别指望书商会出中译本.因这类书的卖相太差,比不上vb,delphi,java这类较大众化的书.再者要找到够格的译者很难.要译好是要花相当时间,那还到不如去写些轻松的书,稿费也赚得多.

接下来就要练基础工夫,如同张无忌花了6年时间练好九阳真经,等到练乾昆大挪移时只花数个时辰就ok.要如何练底层基础呢?勤看书,勤coding及trace别人写得sample code而已.即使是天才型的programmer也是要看书,因window不是他设计的,必须了解window才有办法下手.而非像写algorithm方面的论文般,自己定assumption, lemma,导出theme,下conclusion就完成.所以一些刚入社会的研究生最好先调整自己的心态.

以往我是读一些大师级的书,如:
"window programing"的charlepetzold,
"undocument window"系列的andrew scullman,
"win95 system programming secrets"的mattpietrek,
"advancedwindows"的jefferyrichter.

期刊的话是:
microsoft system journal,
doctor dobb's journal,
window developer journal这本期刊是我认为学ddk的人必要订阅的!几乎过个1,2期就会刊登window device driver相关的文章,而且里面有位paula女士主持的nt专栏,写的很深入,不是市面一些标榜nt"大剖析"之类的书籍所能比拟.在andrew scrullman的"undocument nt"尚未问世之前,它是我觉得最有深度的专栏.

接下来就谈与driver有直接关系的资料:

device driver的书籍,我从win31开始说起:
"writing windows device driver and vxd",karen hazzen,第1,2版是最适合写win31 driver的参考书籍.也有一本白皮的"writing window device driver",我认为它的参考性很低,因它光抄win31 ddk function description就花了50~60几页,有a钱之嫌.

win95:
那当然是首推"system programing for win95",walter oney.

这本巨作.我曾因翻chapter11~13翻到书页掉落,而重新再买一本.walter oney既出,谁与争锋.有这本就够了!也没有人有胆来挑战他.

winnt:
唯一的一本:"the nt device driver book",art baker.很有系统的一步一步介绍如何写nt kernal mode driver.先看这本书然后再看ms的nt ddk on help会让你较容易了解.当初没这本书时,我刚开始看ddk help是看得满头雾水.最好搭配"inside windows nt",helen custer一起看,因为nt底层已经导入object oriented观念(wdm是将nt kernel mode driver 加装plug&play及bus handle等新功能),与win95的virtual machine观念相差甚远.这本书虽是1992年出版,但有对nt的核心运作加以介绍,也是一本难得的好书.

newgroup and website:
1.win95是comp.os.ms-windows.programmer.vxd
2.nt的话是comp.os.ms-windows.programmer.nt.kernel-mode

本文关键:我的DDK学习经验(转载)
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top