編譯第一個WDM程序,菜鳥不可恥

學習和編寫WDM 驅動程序對誰而言都是一件具有挑戰的事情,需要恆心和毅力。當你入門後你會發現這是一件多麼令人興奮的事情。但是如何使用WDM的編譯環境從而開始WDM學習的旅程?對一個初學者來說這個門檻可不低。安裝完DDK後,可以用 [開始]->[Development kit]->[Windows XX DDK]->[check/free Build Environment]來啓動編譯環境,由於DDK沒用提供IDE環境(當然你可以使用配置後的VC或DriverStudio這另當別論),對於我們這些孕育在Xp時代的程序員來說這無疑是件難事。爲什麼?因爲編譯一個WDM程序除了.cpp .h 源文件外至少還需要:
                               makefile文件
                               sources  文件
這兩個文件本應該由IDE自動幫我們生成,如VC就爲我們的所有工程生成了makefile,sources,xx.rc文件,平時我們根本不需要了解他們就可以編譯我們的工程。可DDK沒有工具爲我們生成這兩個文件,但DDK編譯程序的時候又需要他們,俗話說得好“我不如地獄誰入地獄”,我們就來編寫這兩個文件:
       
一.makefile (沒有擴展名,它名字就叫makefile),內容如下:
# DO NOT EDIT THIS FILE!!!  Edit ./sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the components of NT.
#
!INCLUDE $(NTMAKEENV)/makefile.def
值得高興的是,WDM程序使用的所有makefile都這樣寫,我們只需寫一個,編譯時把它拷貝到工作目錄下就行了

二.sources文件就需要我們根據不同的場合修改了,不過基本模板如下:
     
TARGETNAME=驅動程序名             // 告訴編譯器連接生成的文件名爲“驅動程序名”(不含擴展名)
       TARGETPATH=obj                             // 固定不變
       TARGETTYPE=DRIVER                    // 固定不變(表明,連接成*.sys <驅動程序>文件)
       DRIVERTYPE=WDM                         // 爲 Win32 Driver Model 驅動
       INCLUDES=$(BASEDIR)/inc/ddk;$(BASEDIR)/inc   // 源程序可能使用的DDK頭文件所在的目錄
                                                                                           // 多個目錄用“;” 隔開
       SOURCES=aa.cpp bb.cpp                                          // 將編譯的源文件(不寫*.h), 資源文件(*.rc)
                                                                                          // 多個文件用 空格 隔開

      
其中“$(BASEDIR)”指DDK當前的安裝目錄,例如當前DDK安裝在D:上,則
      $(BASEDIR) 就是 “D:/DDK”,所以上面的INCLUDES可以翻譯成
                  D:/DDK/inc/ddk; D:/DDK/inc

三.不得不注意的3個討厭問題:
      1. 編譯時必須保證 makefile,sources和源程序在同一目錄下
      2. 編寫sources文件時,其中的”=”兩邊不能有空格
      3. 如果上面的問題還不夠討厭,那麼下面這個問題可以討厭的讓人放棄學習DDK,工程的工作目錄的
          絕對路徑中不能出現空格,如 “C:/Documents and Settings/MyProgramme/”將不能被DDK編譯器編譯,
         而且表面上看來DDK好像是完成的編譯,實際上它什麼都沒做! (讓我昏了一下午~)

        可以說這篇文章沒有什麼專業含金量,但或許就是諸如上述的“小問題”,成文了初學者的大問題,阻礙了更多的人進入某個領域。
       作者本人就曾被上述問題弄得幾欲放棄,而且請教的時候還被許多號稱“高手”的人取笑作弄,這或許在中國是個現象,雖然我不知道在國外是否也是這樣:
                     “城外的人想進去,城裏的人怕太多的人進去而使城市變得擁擠。”
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章