一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Windows驅(qū)動開發(fā)如何入門

 天朗氣清uizw04 2020-04-23
痛苦一:中文資料太少
講Windows驅(qū)動開發(fā)的,無論是中文書籍還是網(wǎng)上的中文資料,都很少,手把手從零到精通的更是不用說了。僅有的少量中文資料,有的還比較舊,講的是DDK、NT式驅(qū)動,新手拿著WDK8.1、WDK10面對Win8、Win10系統(tǒng)很難跟著學(xué)習(xí),而且現(xiàn)在的WDK,在WDM上又出現(xiàn)了了WDF,而WDF又分KMDF(內(nèi)核模式驅(qū)動)和UMDF(用戶模式驅(qū)動),對于UMDF(用戶模式驅(qū)動)中文資料就更少了。而且驅(qū)動開發(fā)不像應(yīng)用開發(fā),需要先對操作系統(tǒng)原理有一定了解,不然遇到“I/O管理器”、“輸入輸出請求包”、“軟件中斷”、“符號鏈接”、”派遣函數(shù)“等名詞和概念都不知所云,是寸步難行的。

解決方法:
①其實(shí)MSDN上已經(jīng)提供了大量的文檔和示例程序,對KMDF、UMDF等進(jìn)行了詳細(xì)的講解,甚至還提供了手把手教你來的視頻教程,可惜它們都是英文的,對于我等英語不好的程序員來說真是坐車不買票——白搭。最近越來越覺得英語不好是阻礙一個程序員進(jìn)步最大的絆腳石,我們不談什么算法,不談什么數(shù)學(xué)功底了,首先要成為一個合格的碼農(nóng),需要熟練使用各種編程語言和對應(yīng)的各種工具庫,而大部分的庫都只有英文文檔,不能流暢閱讀這些文檔的話,寸步難行。在成為了合格的碼農(nóng),能熟練使用各種現(xiàn)成的工具庫搭積木般的開發(fā)出應(yīng)用程序后,才能去談各種算法,各種數(shù)學(xué)知識的代入,才能去談如何從一個碼農(nóng)升級為軟件工程師。顯然,當(dāng)前擺在我面前最迫切的問題是如何成為一個合格的碼農(nóng),先養(yǎng)活自己,再去考慮如何為社會主義做貢獻(xiàn),如何推動人類科技進(jìn)步。學(xué)習(xí)英語確實(shí)應(yīng)該趕快提上日程并立即執(zhí)行、堅(jiān)持執(zhí)行了。英語好的人真的是把WDK拿來就像用MFC那樣輕松,看著文檔和示例程序,那些個API調(diào)來調(diào)去,一個完整的驅(qū)動程序就出來了。這不是吹牛,我之前在一家公司工作的時候,公司有個項(xiàng)目的一個模塊需要在Ring0上實(shí)現(xiàn),需要編寫Windows內(nèi)核驅(qū)動,然而公司里沒有一個人會,于是老大將這個模塊交給了他的一個朋友去做。他的這個朋友是中國人,在美國微軟總部工作,英語水平怎么樣就不用說了,總之人家以前從來沒搞過驅(qū)動開發(fā),看了文檔和示例代碼后,利用3天的業(yè)余時間就完成了這個模塊,拿到了15K RMB的報酬,著實(shí)讓人佩服,讓人羨慕。真的,學(xué)好英語,不說“聽說寫”,只要能流暢閱讀各種英文技術(shù)資料,完全是另一個世界,學(xué)什么、做什么都得心應(yīng)手。
MSDN上的驅(qū)動開發(fā)資料入口:https://msdn.microsoft.com/zh-cn/windows/hardware
MSDN上手把手教你來的視頻教程:https://msdn.microsoft.com/zh-cn/windows/hardware/gg454522

②抓住僅有的幾本中文書籍,細(xì)細(xì)研讀。關(guān)于Windows驅(qū)動開發(fā)的中文書籍大概有那么幾本:
《Windows驅(qū)動開發(fā)技術(shù)詳解》(強(qiáng)烈推薦先看這本)
《WindowsWDM設(shè)備驅(qū)動程序開發(fā)指南》(比較老了,2000年出版的,以win98、win2000為目標(biāo)系統(tǒng))
《Windows設(shè)備驅(qū)動程序WDF開發(fā)》(為數(shù)不多講WDF的)
《Windows 7設(shè)備驅(qū)動程序開發(fā)》(為數(shù)不多講WDF的,且比較新,這本書的英文版是2010年出版的,中文譯版是2012年出版的)
《竹林蹊徑:深入淺出windows驅(qū)動開發(fā)》
《寒江獨(dú)釣:Windows內(nèi)核安全編程》
《天書夜讀:從匯編語言到Windows內(nèi)核編程》
《Windows內(nèi)核安全與驅(qū)動開發(fā)》(是《天書夜讀》和《寒江獨(dú)釣》的合訂本以及升級版)
后面的這四本其實(shí)不太適合作為入門書籍,而適合作為進(jìn)階書籍,對一些基礎(chǔ)的概念和原理的講解沒有《Windows驅(qū)動開發(fā)技術(shù)詳解》那么多

痛苦二:開發(fā)工具鏈不好用
對于我等剛學(xué)編程時用的就是VisualStudio以及各種智能提示智能感知的插件,甚至還有代碼生成器的輔助的程序員來說,習(xí)慣了VisualStudio傻瓜化的一切,代碼可以自動生成,窗體應(yīng)用程序可以拖控件,甚至連網(wǎng)頁都能拖控件。很難接受只有文本編輯器和命令行工具的開發(fā)環(huán)境,很多時候連代碼編輯器不能智能提示都無法忍受,更不說手動調(diào)用cl.exe link.exe,寫起代碼來就像有一萬只螞蟻在身上爬。
在之前很長的一段時間里,VC6.0和VisualStudio里是沒有創(chuàng)建驅(qū)動項(xiàng)目的選項(xiàng)的,更沒有直接由IDE生成的HelloWorld,如果不想手動cl.exe link.exe,如果想在IDE中寫代碼,需要自己建一個空項(xiàng)目,然后手動配置編譯器指令、鏈接器指令、包含目錄、庫目錄等等,然后把書上的HelloWorld復(fù)制過來,然后可能還會遇到各種問題。生成好驅(qū)動程序文件后,還要手動拷貝到虛擬機(jī)中,借助工具或inf文件手動安裝,然后要改系統(tǒng)配置,進(jìn)入內(nèi)核調(diào)試模式,然后要設(shè)置調(diào)試接口,比如使用COM串口調(diào)試的話要在虛擬機(jī)上設(shè)置,把COM串口映射到主機(jī)的命名管道,然后還不能在VC中調(diào)試,只能用Windbg來調(diào)試??傊啃薷囊幌麓a,需要手工進(jìn)行很多步驟才能開始調(diào)試,非常麻煩。而且即便照著網(wǎng)上或書上的步驟來配置,在不同的環(huán)境下也會遇到各種奇怪的問題,搞起來頗為頭疼。

解決方法:
①有個名為VisualDDK的第三方軟件,使得這個事情方便了很多。VisualDDK裝好后會給VisualStudio安裝一個插件,使得在VisualStudio中可以通過這個插件新建驅(qū)動項(xiàng)目,并且自帶HelloWorld,然后把VisualDDK Monitor裝到虛擬機(jī)中,兩邊配置一下,接下來只要在VisualStudio這邊生成驅(qū)動文件,VisualDDK會自動傳給虛擬機(jī)中的系統(tǒng)進(jìn)行安裝,并且可以直接在VisualStudio中下斷點(diǎn)調(diào)試了。不過這個軟件在安裝和配置過程中,也需要不少步驟,有時候也會出現(xiàn)一些配置不對的問題,偶爾也略感頭疼,且穩(wěn)定性和兼容性不是非常好。此方式適用于VisualStudio2010及以下版本,WDK7.1及以下版本。對于更高的版本,不建議用VisualDDK,因?yàn)榭梢岳^續(xù)往下看,下面有更激動人心的辦法。
VisualDDK官網(wǎng):http://visualddk./
VS2010+VMWare8+VisualDDK1.5.6配置教程:http://techird.blog.163.com/blog/static/1215640362011112385241568/

②激動人心的就是,從VisualStudio2012開始,從WDK8.0開始,微軟在里面整合了一套類似VisualDDK但比VisualDDK好用很多的工具。從那以后,開發(fā)Windows驅(qū)動程序就和開發(fā)Windows應(yīng)用程序一樣方便了,只需在虛擬機(jī)中安裝一個EXE,然后在VisualStudio中輸入它的IP、用戶名、密碼就OK了,接下來你只需新建一個WDK項(xiàng)目,點(diǎn)生成,VisualStudio會自動把驅(qū)動文件傳給虛擬機(jī)中的系統(tǒng)并自動安裝,然后點(diǎn)調(diào)試,就能在VisualStudio中單步調(diào)試了。是不是爽爆了,而且配置和設(shè)置都不復(fù)雜,MSDN上還有手把手教你配置的高清視頻教程!
具體可以看我寫的另一篇文章:
《Win8.1+VS2013+WDK8.1+VirtualBox or VMware驅(qū)動開發(fā)環(huán)境配置》:http://blog.csdn.net/charlessimonyi/article/details/50904956

痛苦三:沒有庫可用
假如有一天老板叫你開發(fā)一個軟件,允許你使用你擅長的任意一門語言,C/C++/C#/JAVA/Python等。但是附加了一個條件:不能使用任何第三方庫,不能使用標(biāo)準(zhǔn)庫!你有什么感想。What!標(biāo)準(zhǔn)庫都不能用?那還寫個毛。是的,沒錯,開發(fā)Windows驅(qū)動程序,幾乎什么庫都用不了,包括標(biāo)準(zhǔn)庫。因?yàn)槲覀兤綍r常用的第三方庫或標(biāo)準(zhǔn)庫,它的實(shí)現(xiàn)其實(shí)都是調(diào)用系統(tǒng)API,在Windows上調(diào)用的是Window API,即uer32.dll、kernel32.dll、gdi32.dll等等提供的API函數(shù)。但是這些API函數(shù)屬于應(yīng)用層API,無法在驅(qū)動程序中使用,因?yàn)轵?qū)動程序跑在內(nèi)核層。所以只要一個庫的實(shí)現(xiàn)上調(diào)用了系統(tǒng)API,就無法在驅(qū)動程序中使用。少數(shù)庫還是可以使用的,比如math.h中的各種數(shù)值計算函數(shù)。不過僅剩的可用的庫太少了,很多時候你都需要從新發(fā)明輪子。甚至連C語言中的malloc、free,C++中的new、delete,你都需要自己去實(shí)現(xiàn)。

解決方法:
①自己發(fā)明輪子就自己發(fā)明輪子,雖然沒有現(xiàn)成庫可用,但有內(nèi)核層下的系統(tǒng)API可用,很多和應(yīng)用層的API很相似,你想要的功能基本都可以通過這些API實(shí)現(xiàn)。

②咬咬牙,把苦水往肚子里咽。搞驅(qū)動開發(fā)的人很少,苦盡甘(qian)來


本文由CharlesSimonyi發(fā)表于CSDN博客:http://blog.csdn.net/charlessimonyi/article/details/50904854轉(zhuǎn)載請注明出處

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    中文字幕免费观看亚洲视频 | 亚洲黄片在线免费小视频| 色哟哟在线免费一区二区三区| 国产精品视频一级香蕉| 五月婷婷综合激情啪啪| 少妇人妻无一区二区三区| 狠狠干狠狠操亚洲综合| 中文日韩精品视频在线| 亚洲av秘片一区二区三区| 欧美日韩亚洲巨色人妻| 五月天婷亚洲天婷综合网| 国产精品欧美一级免费| 女厕偷窥一区二区三区在线| 色好吊视频这里只有精| 人妻一区二区三区在线| 欧美尤物在线视频91| 99久久免费中文字幕| 熟女少妇一区二区三区蜜桃| 欧美中文字幕日韩精品| 精品人妻久久一品二品三品| 国产免费黄片一区二区| 国产精品人妻熟女毛片av久| 尹人大香蕉中文在线播放| 91超频在线视频中文字幕 | 日韩欧美中文字幕人妻| 久久精品亚洲精品国产欧美| 一区二区三区日韩在线| 在线观看欧美视频一区| 日韩欧美黄色一级视频| 在线观看视频日韩成人| 高清一区二区三区不卡免费| 欧美国产在线观看精品| 麻豆国产精品一区二区| 亚洲一区二区三在线播放| 久久精品中文扫妇内射| 91欧美亚洲视频在线| 欧美激情视频一区二区三区| 一区二区三区亚洲天堂| 国产免费操美女逼视频| 高潮日韩福利在线观看| 国产女性精品一区二区三区|