windows CE驅動開發學習筆記

2021-05-18 07:45:53 字數 2252 閱讀 6365

首先是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檔案

在pb 中新建乙個專案,選擇geode,嚮導完成後,選擇file,manage catalog

item

,增加剛才的cer檔案。然後catalog item出現了intel 8255xer fast

ethernet driver

項,右鍵增加到os design中。

修改config.bib,在memory段增加epktbuf 801dc000 00020000 reserved

修改platform.bib,在modules段增加e100ce.dll

$(_flatreleasedir)/e100ce.dll nk sh

修改platform.reg,增加網絡卡驅動中修改後的reg檔案的內容。

拷貝e100ce.dll到d:/wince500/platform/geode/files。

Windows CE驅動開發常用巨集定義

巨集的確是個好 在ce驅動開發過程中,正確,準確的使用恰當的巨集,能使得 非常精煉,書之精彩,閱之愉悅.對於開發中經常用到的一些巨集,我在這裡做了一些總結.暫存器操作 8bit defineinreg8 x read register uchar uchar x define outreg8 x,y...

windowsCE驅動程式問題集錦

如何讓系統載入自己寫的驅動程式?兩種辦法 1 在 hkey local machine drivers builtin 下新增註冊鍵。2 在應用程式中呼叫activatedeviceex。在一些檔案中用分號來表示注釋,例如下面的內容 在 cesysgen.前加了 有沒有什麼特別的含義?在wince的...

Windows CE下AD驅動設計與實現

本文 http developer.51cto.com art 200907 136858.htm 引言 windows ce.net 是乙個32位 多工 多執行緒的完全搶占式的實時作業系統。它提供了眾多強大工具適應於快速構建新一代記憶體少 體積小的智慧型裝置,如工業控制器 手持式裝置等。該系統的特...