隨著計算機技術和嵌入式技術的迅猛發展, 嵌入式軟、硬件設計需求越來越廣泛, 嵌入式軟件開發, 特別是嵌入式軟件的驅動開發,成為一個熱點。 Windows CE是一個新的、可移植的、實時的、模塊化的操作系統,具有簡捷、高效的完全搶先式多任務操作核心,支持強大的通信和圖形顯示功能, 能夠適應廣泛的系統需求, 在最新一代的工業和家用電子設備中得到了廣泛的應用。 在進行嵌入式Windows CE 項目開發的過程中, 經常需要根據需求定制顯示屏, 如何為定制的顯示屏開發Windows CE 驅動程序成為嵌入式系統開發的關鍵步驟。本文在深入研究Windows CE 驅動程序工作原理的基礎上, 以維信諾VGG13264C 132×64 OLED 顯示模塊的WindowsCE 驅動程序設計為例, 詳細闡述了嵌入式Windows CE 驅動程序的開發過程,并對設計實現的驅動程序進行了測試。 1 Window CE 的系統體系結構 Windows CE 是微軟設計開發的一種可升級的搶先式多任務32 位實時操作系統。一個基于Windows CE 的平臺主要由以下幾部分組成:Windows CE 內核組件、OAL 層和驅動程序。OAL 層和驅動程序作為目標設備和Windows CE 內核組件之間的接口, 將操作系統上層與硬件隔離, 便于支持硬件擴展和即插即用功能,圖1 詳細描述了三者之間的關系。 ![]() 2 Windows CE 中斷處理 Windows CE 將中斷處理分為兩個步驟: 中斷服務例程(ISR)和中斷服務線程(IST)。把每個硬件的設備中斷請求(IRQ) 和一個ISR 聯系起來, 當一個中斷發生并未被屏蔽時,內核調用該中斷注冊的ISR.因為ISR 運行于內核模式, 所以應設計得盡可能短,ISR 引導內核調度和啟動合適的IST,IST 在設備驅動程序軟件模塊中編寫, 運行于用戶模式, 它從硬件獲取或向硬件發送數據和控制代碼, 并進一步處理設備中斷。Windows CE 還提供了中斷嵌套功能, 即在一個ISR 運行時, 內核并不關閉中斷, 當優先級比之高的中斷發生時,內核保存當前執行的中斷服務例程ISR 的運行狀態, 掛起該ISR,轉而執行更高優先級中斷的ISR.等到高優先級中斷的ISR執行完后,被掛起的低優先級中斷的ISR 才重新開始被CPU 調度執行。Windows CE 的中斷處理框圖如圖2 所示。 ![]() 3 Windows CE 設備驅動程序 設備驅動程序將操作系統和設備連接起來, 使操作系統能夠識別設備, 并為應用程序提供服務。 3.1 設備驅動程序模型 Windows CE 提供了用于驅動開發的模型,其中包括來自其他操作系統的驅動程序模型。 因為有這些多變的驅動程序模型, 使Windows CE可以適應大部分的內部和外圍設備。目前,Windows CE提供了4 種設備模型,其中兩種是專用于Windows CE模型, 另外兩種外部模型來自其他的操作系統, 匯總如圖3 所示。 ![]() 3.2 本機驅動程序 要把Windows CE 移植到目標平臺上, 必須為平臺上已建立的設備提供驅動程序。一些類型的設備, 如鍵盤、顯示器和PC 卡插槽等對操作系統都有一個自定義接口。因為這些接口是專門用于Windows CE 的,所以稱這類驅動程序為本機驅動程序。Windows CE 平臺生成器提供本機設備驅動程序的樣本,可考慮把本機設備驅動程序樣本應用到平臺上, 而不需要再從頭開發自己的本機驅動程序。用戶可根據驅動程序樣本快速開發自己的驅動程序。 3.3 流接口驅動程序 流接口驅動程序由設備管理應用程序加載、管理和卸載,與具有單獨目的接口的本機驅動程序相比,所有流接口驅動程序使用同一個接口并調用同一個函數集---流接口函數。流接口驅動程序把外設抽象成一個文件, 使用標準文件I/O 函數和電源管理函數, 這些函數由Windows CE 操作系統的內核使用。流接口驅動程序的入口點函數為: XXX_ Init、XXX_Deinit、XXX_IOCONtrol、XXX_Open 、XXX_Close 、XXX_PowerDown 、XXX_PowerUp 、XXX_Read 、XXX_Seek 、XXX_Write .流接口驅動程序函數的作用及調用關系如表1 所示。 ![]() 表1 Windows CE 下流接口驅動程序函數作用及調用關系 流接口驅動程序從設備管理器和通過文件系統調用的應用程序接受命令,裝入驅動將這些命令翻譯成其所控制設備的適當操作的所有信息。所有的流接口驅動, 無論它管理的是內置式設備還是可安裝式設備,是系統引導加載還是動態加載, 它們與其他的系統組件都有類似的交互過程。 3.4 設備驅動程序的初始化過程 在Windows CE 中, 所有的設備驅動程序都以動態鏈接庫(DLL) 的形式存在,需要通過進程加載。設備驅動程序向外提供接口函數,應用程序使用API 對設備進行訪問。Windows CE 共有三類系統進程用來加載驅動程序:Device.exe 、GWES.exe 、FileSys.exe .驅動程序的初始化過程為:設備上電---啟動bootloader---啟動NK.exe---啟動Device.exe---初始化數據結構和I/O---加載總線枚舉器---枚舉注冊表Driver/BuildIn 下所有的子鍵。這里的枚舉就是循環調用ActivateDeviceEx 函數加載驅動程序。 4 Windows CE 開發流接口驅動程序實例 以維信諾VGG13264C 132×64 OLED 顯示模塊的驅動程序為例, 具體闡述Windows CE 驅動開發的過程。 4.1 硬件結構 系統硬件以飛凌OK6410-B 開發板為主板, 以維信諾VGG13264C 顯示模塊為OLED 顯示屏。系統硬件框圖如圖4 所示。 ![]() 飛凌OK6410 -B 開發板基于三星公司最新的ARM11 處理器S3C6410 , 擁有強大的內部資源和視頻處理能力,可穩定運行在667 MHz 主頻以上, 支持MobileDDR 和多種NAND Flash .FL6410 開發板上集成了多種高端接口, 如復合視頻信號、攝像頭、USB、SD 卡、液晶屏、以太網等, 豐富的接口可幫助用戶實現高端產品級設計。 維信諾VGG13264C 是132 列×64 行點陣的OLED 單色、字符、圖形顯示模塊, 使用單芯片SSD1303T6 進行驅動,具有8 位并行數據接口, 模塊內含132×64 顯示數據RAM, 通過用戶I/O 接口連接到飛凌OK6410-B 開發板。 4.2 流接口驅動程序開發過程 Windows CE 提供了兩種編寫流接口驅動的方法: (1) 通過編寫動態鏈接庫的方法實現; (2) 通過修改BSP的方法實現。由于第二種方法可以加快開發進度, 在該實例中,使用修改BSP 的方法進行流接口驅動程序開發, 其開發步驟為: 首先在BSP 中新建一個目錄,編寫驅動程序文件并確定驅動程序向外提供的接口函數,然后進行注冊表設置, 最后進行測試。 (1) 驅動程序代碼編寫 設備初始化使用OED_Init 函數實現, 設備卸載使用OED_Deinit 函數實現。在OED_Init 函數中,使用DrvLib_MapIoSpace 函數實現物理地址到虛擬地址映射;在OED_Deinit 函數中, 使用VirtualFree 函數釋放驅動程序使用的虛擬內存從而實現了設備的卸載。 設備的I/O 控制向設備發出命令, 按照維信諾VGG13264C OLED 顯示模塊的時序關系,通過控制相應管腳的電平高低實現向設備發出命令。設備的I/O 控制在OED_IOControl 函數中實現, 函數部分代碼如下: ![]() (2) 向外提供函數接口 通過配置OED.def 文件導出OLED 提供的接口函數, 供設備管理器使用。在OED.def 文件中添加如下代碼: ![]() (3) 注冊表配置。 注冊表文件Platform. reg 用來配置與OLED 驅動有關的信息, 配置如下: [HKEY_LOCAL_MACHINEDriversBuiltInIoControler] "Prefix "="OED" "Dll "="OED.dll " "Index "=dword:0 隨著嵌入式系統廣泛應用到信息家電、工業控制、移動通信、互聯網等領域,大量嵌入式系統的開發必將對人類科技的發展起著重要的作用。本文介紹的基于嵌入式操作系統Windows CE 的驅動程序會幫助讀者開發出更多的嵌入式系統產品。 Source:網絡 |