Windows CE6.0的DM9000A流接口驅動開發
摘要:針對Windows CE系統下專用網絡驅動接口開發難度大的情況,本文介紹一種基于Windows CE流接口驅動的工作機制及開發方法。相比于Windows CE對各種硬件設備所提供的專用接口,流接口驅動具有更大的靈活性,且能夠實現應用層到底層硬件的控制。以含有ARM11內核的S3C6410結合以太網通信芯片DM9000A為例,逐步分析流接口驅動程序的開發流程,并利用PC機抓取以太網通信數據,驗證了流接口驅動程序開發的正確性。
本文引用地址:http://www.104case.com/article/202323.htm關鍵詞:Windows CE 6.0;S3C6410;DM9000A;流接口驅動
引言
嵌入式技術在各個領域的應用與日俱增,基于微軟公司研發的Windows CE嵌入式操作系統的電子設備更是滲透到各行各業。隨著網絡技術的發展,以太網幾乎成為了電子通信設備首選的通信方式。Windows CE 6.0提供的網絡接口驅動器標準(NIDS)固然得到系統的良好支持,但其驅動程序的實現較為復雜,且通過NIDS實現應用程序對網絡底層驅動的操作難度較大。
針對Windows CE6.0系統下應用程序對設備硬件難以靈活控制的問題,本文介紹一種使用流接口驅動實現應用程序對硬件進行控制的方法。考慮到Windows CE6.0在內核訪問機制上有別于以往版本,且以太網接口的廣泛使用及其基于NIDS的開發難度較大,故而以DM9000A網絡芯片的驅動及控制為例進行介紹。
1 Windows CE 6.0的設備驅動機制
Windows CE所有的驅動程序都是以DLL文件的形式存在的,系統在執行驅動程序代碼之前必須先將相應的DLL文件加載到地址空間。Wind owsCE 6.0提供3個系統進程來加載和執行驅動程序的DLL文件,它們分別是Device.exe、GWES.exe和FileSys.exe。它們各自加載的驅動類型如圖1所示。
2 流接口驅動工作原理
2.1 流接口驅動架構
應用程序根據加載的流驅動的名稱和操作碼調用文件API,文件API被系統轉發到FileSys.exe進程中;FileSys.exe一旦發現轉發過來的文件API是對設備的操作,則會交給設備管理器進行處理;設備管理器將根據具體的請求,調用相應的流驅動接口程序。對于Windows CE系統應用層而言,使用流接口驅動的硬件設備被抽象為一個具有固定接口函數的動態鏈接庫(DLL)。應用程序調用文件API函數與流接口驅動程序進行通信,把對硬件的操作轉化為對文件的讀寫控制,從而達到應用程序操作硬件的目的。流接口驅動程序的體系結構如圖2所示。
2.2 流驅動接口函數
流接口驅動程序具有統一的接口函數,只需根據硬件沒備的操作時序在相應的接口函數里編寫控制指令。Windows CE系統下流接口函數功能描述如表1所列。
表1中XXX代表驅動文件的名稱,Windows CE中流接口驅動的文件名稱規定為3個大寫的字母/數字。在進行流接口驅動程序編程時,并非所有的接口函數都要編寫,一般比較重要的是XXX_Init()和XXX_IOControl()兩個函數。前者在設備驅動被加載時調用,主要編寫初始化硬件設備的相應控制指令,其中包括很是關鍵的地址映射操作;后者則主要實現對硬件設備的各種控制,可以實現數據的讀寫等操作,對設備的所有控制都可以在這個接口函數下實現,只需分配好相應的控制碼。對于本文介紹的DM9000A,DM9_Init()實現虛擬地址的獲取及初始化操作,DM9_IOControl()則實現數據的發送與接收,其中發送控制碼定義為DM9_SendData,接收控制碼為DM9_ReceiveData。
評論