因為課題前期調研沒做好,用的cpu板卡和資料採集卡來自兩個部門。加上買的是裸板,自己定製的os,技術支援不愛搭理。所以給的ai板卡的驅動一直裝不上,自己在鬱悶中尋找答案,就紮進了wince驅動的知識庫裡了。不管驅動裝不上是不是這個原因,學點東西總沒有壞處。做點記錄備查:)
首先是wince驅動的分類問題。按照書上講的說ce下驅動分成單體驅動和分層驅動,而看到另一種說法是本機驅動和流式驅動。經過microsun大哥的指點,把這兩種分類法分開了。在這裡引用一下:
「單體與分層只是從**的形式上做的分類.分層驅動**上分為pdd與mdd,一般的微軟已經實現了mdd,可能也實現了pdd,我們只需要對pdd做些修改就能使用,比如音訊的驅動,顯示的驅動。單層驅動是把pdd與mdd寫在一起,沒有做嚴格的區分,通常這種驅動比較簡單,比如:atadisk。
至於本地驅動和流式驅動是從驅動與系統其它模組(呼叫者)的介面形式上做的分類.其實,本地驅動這個名稱不大恰當,可能叫專用驅動或其它名字更為合適.它是指呼叫它的模組給它有特定的介面,比如電源驅動和通用led驅動。而串列埠,網絡卡等就是流介面驅動程式.
所以,乙個驅動程式可以是單體的流式驅動,例如:atadisk.也可以是分層的流式: 如ohci 」
按照我的理解,單體和分層是驅動實現方式上的分類,而本地和流式則是驅動模型上的分類,所謂本地驅動就是作業系統有保留專門的介面,所謂流式是指編寫的dll檔案裡可以匯出各種流式介面函式。
第二點:驅動的功能屬性。裝置驅動程式是作業系統核心和硬體的介面,作業系統定義了一組標準的介面,編寫驅動的過程也就是實現這些介面。從應用程式到具體硬體間有如下這些環節起作用:應用程式-呼叫os函式-作業系統-驅動介面-驅動程式-硬體操作函式-硬體。在wince裡驅動都以使用者態的dll存在,需要通過程序載入到slot裡。共有三類系統程序用來載入:device.exe,gwes.exe,filesys.exe.絕大多數裝置驅動都是通過device.exe載入的。需要注意的是,不同的os保留的裝置驅動介面是不一樣的,如桌面windows和wince就不同。
第三點:wince下裝置的初始化分為兩個階段:device.exe的初始化;外設的列舉和載入。其流程是:上電-啟動bootloader-啟動nk-啟動登錄檔init鍵(device.exe啟動)-初始化資料結構,i/o,電源管理等-載入busenum.dll(匯流排列舉器)-列舉登錄檔下driver/buildin的所有子鍵。這裡的列舉過程就是迴圈呼叫activatedeviceex()函式載入驅動的過程。在os啟動完畢後,我們可以用pb的remote registry tool檢視h_l_m/drivers/active包含的子鍵,看哪些驅動隨啟動而載入。
第四點:流介面驅動的概念。暴露流式介面函式的驅動即是流驅動,它把外設抽象成乙個檔案。過程是:應用程式使用檔案api對裝置進行訪問,os接受api呼叫filesys.exe,轉到device.exe,呼叫流介面,與硬體互動。所謂流介面函式有十個,包括***_init、***_deinit、***_open、***_close、***_read、***_write、***_powerup、***_powerdown、***_seek、***_iocontrol,在wince5.0中增加le了***_preclose,***_predeinit.而我們在應用程式裡對應的檔案api有createfile、deviceiocontrol、 readfile、 writefile,closehandle,setfilepointer.
第五點:編寫流驅動的步驟。有兩種實現途徑:1。寫dll,做成project,加入到os裡。2。改bsp,把驅動寫在bsp裡,再選擇那個bsp做os。第一種方法步驟是在pb中新建乙個dll專案,編寫一些輸入函式,暫存器,外設的宣告,寫dllentry函式;實現流介面函式;編寫dll的匯出函式檔案.def;為驅動程式寫入登錄檔項,還需要修改bib檔案。第二種方法就是在platform/bsp/drivers下新建乙個目錄,然後在drivers目錄中的dirs檔案中加入新建的目錄名。在新建的目錄下,新建你的源**檔案,在其中實現dll函式。新建名稱分別為sources, makefile, ***.def的檔案;修改platform.reg和platform.bib檔案。
wince驅動開發學習筆記
因為課題前期調研沒做好,用的cpu板卡和資料採集卡來自兩個部門。加上買的是裸板,自己定製的os,技術支援不愛搭理。所以給的ai板卡的驅動一直裝不上,自己在鬱悶中尋找答案,就紮進了wince驅動的知識庫裡了。不管驅動裝不上是不是這個原因,學點東西總沒有壞處。做點記錄備查 首先是wince驅動的分類問題...
WinCE驅動開發基礎
wince中的程序 process 是程式的一次動態執行例項 instance 程序不參與系統排程,沒有優先順序和上下文。每個程序在建立時都會建立乙個主線程作為其預設的執行體。真正參加系統排程的是執行緒。wince提供了互斥mutex,事件event,訊號量semaphore 3種核心機制來實現多執...
wince 驅動開發 BSP目錄
摘要網路出處 驅動需要 platform common 這裡存放了所有可重用的 這一部分 將在 bsp之前編譯。platform common src common 這裡存放了被 bsp中重用的通用 這一部分 是跟硬體平台無關的。譬如一般的 ioctl 處理函式 與核心互動的公共的中斷程式等等,另外...