日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 嵌入式 > 嵌入式硬件
[導讀]搞Windows驅動開發(fā)是一件痛苦的事情,特別是初學Windows驅動開發(fā)。有的人覺得Windows驅動開發(fā)就是把開發(fā)包WDK下載下來,然后只要掌握了C/C++語言,接下來無非就是類庫調來調

搞Windows驅動開發(fā)是一件痛苦的事情,特別是初學Windows驅動開發(fā)。有的人覺得Windows驅動開發(fā)就是把開發(fā)包WDK下載下來,然后只要掌握了C/C++語言,接下來無非就是類庫調來調去,像調用MFC、QT之類的庫那樣,看著書和MSDN上的文檔來就行了。等真正接觸以后才發(fā)現根本不是那么一回事,痛苦源于以下幾點:

痛苦一:中文資料太少

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

解決方法:

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

MSDN上的驅動開發(fā)資料入口:https://msdn.microsoft.com/zh-cn/windows/hardware

MSDN上手把手教你來的視頻教程:https://msdn.microsoft.com/zh-cn/windows/hardware/gg454522

②抓住僅有的幾本中文書籍,細細研讀。關于Windows驅動開發(fā)的中文書籍大概有那么幾本:

《Windows驅動開發(fā)技術詳解》(強烈推薦先看這本)

《WindowsWDM設備驅動程序開發(fā)指南》(比較老了,2000年出版的,以win98、win2000為目標系統(tǒng))

《Windows設備驅動程序WDF開發(fā)》(為數不多講WDF的)

《Windows 7設備驅動程序開發(fā)》(為數不多講WDF的,且比較新,這本書的英文版是2010年出版的,中文譯版是2012年出版的)

《竹林蹊徑:深入淺出windows驅動開發(fā)》

《寒江獨釣:Windows內核安全編程》

《天書夜讀:從匯編語言到Windows內核編程》

《Windows內核安全與驅動開發(fā)》(是《天書夜讀》和《寒江獨釣》的合訂本以及升級版)

后面的這四本其實不太適合作為入門書籍,而適合作為進階書籍,對一些基礎的概念和原理的講解沒有《Windows驅動開發(fā)技術詳解》那么多

痛苦二:開發(fā)工具鏈不好用

對于我等剛學編程時用的就是VisualStudio以及各種智能提示智能感知的插件,甚至還有代碼生成器的輔助的程序員來說,習慣了VisualStudio傻瓜化的一切,代碼可以自動生成,窗體應用程序可以拖控件,甚至連網頁都能拖控件。很難接受只有文本編輯器和命令行工具的開發(fā)環(huán)境,很多時候連代碼編輯器不能智能提示都無法忍受,更不說手動調用cl.exe link.exe,寫起代碼來就像有一萬只螞蟻在身上爬。

在之前很長的一段時間里,VC6.0和VisualStudio里是沒有創(chuàng)建驅動項目的選項的,更沒有直接由IDE生成的HelloWorld,如果不想手動cl.exe link.exe,如果想在IDE中寫代碼,需要自己建一個空項目,然后手動配置編譯器指令、鏈接器指令、包含目錄、庫目錄等等,然后把書上的HelloWorld復制過來,然后可能還會遇到各種問題。生成好驅動程序文件后,還要手動拷貝到虛擬機中,借助工具或inf文件手動安裝,然后要改系統(tǒng)配置,進入內核調試模式,然后要設置調試接口,比如使用COM串口調試的話要在虛擬機上設置,把COM串口映射到主機的命名管道,然后還不能在VC中調試,只能用Windbg來調試。總之每修改一下代碼,需要手工進行很多步驟才能開始調試,非常麻煩。而且即便照著網上或書上的步驟來配置,在不同的環(huán)境下也會遇到各種奇怪的問題,搞起來頗為頭疼。

解決方法:

①有個名為VisualDDK的第三方軟件,使得這個事情方便了很多。VisualDDK裝好后會給VisualStudio安裝一個插件,使得在VisualStudio中可以通過這個插件新建驅動項目,并且自帶HelloWorld,然后把VisualDDK Monitor裝到虛擬機中,兩邊配置一下,接下來只要在VisualStudio這邊生成驅動文件,VisualDDK會自動傳給虛擬機中的系統(tǒng)進行安裝,并且可以直接在VisualStudio中下斷點調試了。不過這個軟件在安裝和配置過程中,也需要不少步驟,有時候也會出現一些配置不對的問題,偶爾也略感頭疼,且穩(wěn)定性和兼容性不是非常好。此方式適用于VisualStudio2010及以下版本,WDK7.1及以下版本。對于更高的版本,不建議用VisualDDK,因為可以繼續(xù)往下看,下面有更激動人心的辦法。

VisualDDK官網:http://visualddk.sysprogs.org/

VS2010+VMWare8+VisualDDK1.5.6配置教程:http://techird.blog.163.com/blog/static/1215640362011112385241568/

②激動人心的就是,從VisualStudio2012開始,從WDK8.0開始,微軟在里面整合了一套類似VisualDDK但比VisualDDK好用很多的工具。從那以后,開發(fā)Windows驅動程序就和開發(fā)Windows應用程序一樣方便了,只需在虛擬機中安裝一個EXE,然后在VisualStudio中輸入它的IP、用戶名、密碼就OK了,接下來你只需新建一個WDK項目,點生成,VisualStudio會自動把驅動文件傳給虛擬機中的系統(tǒng)并自動安裝,然后點調試,就能在VisualStudio中單步調試了。是不是爽爆了,而且配置和設置都不復雜,MSDN上還有手把手教你配置的高清視頻教程!

具體可以看我寫的另一篇文章:

《Win8.1+VS2013+WDK8.1+VirtualBox or VMware驅動開發(fā)環(huán)境配置》:http://blog.csdn.net/charlessimonyi/article/details/50904956

痛苦三:沒有庫可用

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

解決方法:

①自己發(fā)明輪子就自己發(fā)明輪子,雖然沒有現成庫可用,但有內核層下的系統(tǒng)API可用,很多和應用層的API很相似,你想要的功能基本都可以通過這些API實現。

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

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉