天天看點

驅動的境界

 1、驅動是什麼?

 (1)基本境界,驅動就是一個安裝包

 最初很多人都是這樣認為的,至少我是,但不乏很多幹裝機幹了許多年的人還是這樣認為的,例如我們這科技市場的一個“高手”,幹了7年的裝機還是認為驅動就是一個安裝包,運作一下就行了。

 處于這種境界時一般會按照硬體的類型,至少是按照硬體的“牌子”(例如ATI或nVIDIA的顯示卡,至于什麼型号有些人并不一定知道)去搜尋驅動安裝包,得到安裝包後輕按兩下開始安裝,完事。

 不過我并不是在否定或貶低這種認識,這種認識是并非是錯誤的,廠商提供驅動安裝包也是為了最大簡化驅動安裝複雜度、提高驅動安裝穩定性而做的,基本境界對驅動的了解和硬體廠商制作驅動安裝包的目的是吻合的。

    (2)進階境界,驅動就是一堆散亂的以SYS、DLL、EXE、CAT等為字尾的檔案

 一般人在手動使用Windows提供驅動搜尋與安裝程式進行驅動搜尋與安裝至少一次後,即會對驅動産生上述的了解。

 在這種境界下,漸漸的認識到了驅動并非像普通軟體那樣,隻能采取固定的安裝方式。也慢慢的認識到,驅動的安裝是系統提供的一種基礎功能,這個基礎功能不随驅動安裝包的類型、硬體的類型不同而改變。

 達到這種境界的人有很多,基本上大多數的人都處在這一層。不過處于這一層的人也分化為兩類,一類人認為與驅動相關的所有的SYS、DLL、EXE、CAT等都是驅動必須的,至少絕大多數是必須的;另一類人則對每個SYS、DLL、EXE、CAT等檔案究竟是什麼作用有很有興趣。

    一般而言,此層次第一類人在用别人的驅動包也會自己做一些驅動包,而第二類人在用自己的驅動包或在研究比較牛的驅動包。

 (3)進階境界,驅動檔案與驅動INF有關,且并非所有的檔案都真的是“驅動檔案”

 一般而言,隻有上一層次中的第二類人會達到這個境界。在長期的驅動搜集與研究工作中,在實踐達到一定程度後,逐漸的會對哪些檔案是真正關于驅動的、哪些檔案是很少用到的、哪些檔案非驅動檔案但卻是必須的有一定感悟。

 達到這個境界的人,逐漸會開始對驅動檔案與驅動INF的關系有一定的認識,會嘗試去掉某些很少用的或基本無用的檔案,會嘗試簡縮驅動的總體體積等,甚至某些人可以對INF進行一定程度的修改與定制。

 這種境界是很有成就感的,達到這種境界後就像封裝系統成功後的那種成就感一樣,隻不過以前是在定制系統,而現在是在定制驅動。順道說一句,驅動裡也可以加你的OEM資訊,嘿嘿。

    (4)達人境界,驅動INF自己寫,驅動檔案自己改

 達到這種境界的人相當少,對INF檔案了解到一定程度後可以完全自己寫INF,還可以根據自己驅動的應用,加強驅動中的某些部分,例如現在某些改版驅動就會加強OPENGL在遊戲中的效果。

    這可能是玩驅動的人的最高境界了,不過或許也不是可望不可及的吧,希望有一天我們也能達到這個境界!

2、哪些檔案才是真正的“驅動檔案”

 如果我們對一個驅動安裝包進行解壓,或者提取已經安裝好的驅動,我們會發現“驅動”一般由如下幾類檔案組成:

 (1)CAT檔案,這種檔案用于驅動的微軟認證,所謂微軟認證就是經過微軟測試并認可的驅動,相對而言,通過了微軟認證的驅動具有較高的穩定性與可用性,但并非未通過認證的驅動就一定是不穩定、不可用的。但不要試圖指望在修改驅動後CAT檔案依舊能幫你通過驅動認證,之是以稱作認證,是嚴格的、不可修改的。

 (2)SYS檔案,一般的,SYS檔案就是就是真正的驅動檔案,至少是諸多必須檔案中的一個。我們每安裝一個驅動都會在系統中建立一個驅動服務,每次我們進系統的時候這個驅動服務就會加載與這個服務相對應的SYS檔案啟動,進而“驅動”起硬體。最原始的驅動,就我個人了解,應該就是SYS檔案以及與其對應的INF檔案。

 (3)EXE檔案,一般的,EXE檔案為控制器檔案或者驅動相關服務所需的檔案。控制器,如顯示卡的調整控制器,用以調整顯示卡的諸多性能與項目。驅動相關服務,如某些幫助服務、OPENGL調節服務等。EXE檔案總體來講用于各種調整功能,而EXE檔案一般而言并非驅動所必須的檔案。

 (4)DLL檔案,DLL檔案被稱為“動态連結庫檔案”,DLL中一般包含其他檔案要調用的函數或者功能,總之可以把DLL了解為一個倉庫,其他檔案執行時會在其中找到所需的。DLL檔案一般為控制器檔案的擴充,或者為控制台的各個功能。一般來講,DLL檔案與EXE檔案的關系比較密切,是以DLL也并非驅動所必須的檔案,不過不排除例外,例如很多顯示卡驅動中的DLL也有其特殊的存在意義。

 (5)CHM和HLP檔案,這兩類檔案中一般是驅動說明和使用幫助,大緻上可以了解為說明書。既然是說明書,也就肯定與驅動本身無關,隻是起擴充的解釋說明作用。是以基本上而言,CHM和HLP檔案非驅動所需。

 (6)INF檔案,INF檔案可以了解為一份驅動安裝所需的配置檔案。我們讓系統搜尋并安裝驅動時,系統就是根據INF檔案的内容來決定:要複制哪些檔案到什麼位置、共需要哪些檔案、有哪些裝置是可以安裝這個驅動的、驅動安裝後顯示什麼名字、要為這個驅動安裝什麼樣的驅動服務等等。可以說INF檔案決定着驅動的安裝方式,起着指向作用。

3、玩驅動的目的何在?

 玩系統的最終層次,在于玩驅動和玩程式設計——當然,這是對我們大多數非專業從事驅動與程式設計事業的人而言的,其實驅動說到底也是程式設計。

 有人熱衷于小玩意,例如改個IE圖示、減少滾動條次數、改個桌面加個自己的名字、改個OEM資訊、裝個一鍵還原、裝3個殺毒2個防火牆(……),當然,這些東西是必須要會的,但絕對不是會了這些就可以說自己能駕馭系統、駕馭驅動、駕馭計算機了。

    要駕馭系統,其一就是要駕馭驅動。

 為什麼我一直在強調我們是在玩,一是因為我們一直是在改别人的成品,從系統到驅動,雖然沒有一樣是我們創造的,但是我們無一不把他們改的更有意思了;二是因為“玩”是一種良好心态,如果把一切當成任務,那麼必然會失去最直接的動力——興趣。

    好吧,言歸正傳。

 驅動是一個貫穿整個Windows環境下的東西,無論我們現在是在玩XP的驅動,還是将來我們會玩Vista甚至Win7的驅動,至少在将來的10年裡,在Windows的桌面級作業系統裡,驅動這個概念是不會有太大變化的。XP活了8年,再活2年沒問題,現在還有人在用2K;Vista的研發花了大價錢,就算再不濟,微軟也不可能讓它倒的這麼快;既然Win7也是桌面而非網絡作業系統,那麼Windows的這個模式還會存在至少10年。

 雖然沒有萬用的東西,我們不可能讓XP的驅動在Vista下有效,但是東西永遠是死的,人永遠是活的,隻有方法、思想和精神是通用的。我們研究驅動的目的,在于掌握一種可以在Windows下通用至少10年的方法與思想。玩驅動給我們這些從事裝機、維護等行業的人來說,最直接的效果是我們可以按我們的需要來修改、精簡驅動。例如,修改的一個作用是可以讓裝置管理器裡直接顯示我們的OEM資訊,精簡的最直接作用是可以有效減少驅動的體積。但是,萬萬不可隻注重修改與精簡帶來的最終目的,而忽略了過程中的東西。就像沒認真玩過nLite的人對XP的結構組成絕對沒有玩過nLite的人了解一樣,精簡與修改的意義不在于最後我可以改的多麼花哨或是精簡的像個骨頭,而在于我們在做這些時,對系統、對驅動認識的逐漸增加。

繼續閱讀