WINCE6.0的體繫結構圖如所示:
圖1 WINCE的體繫結構
根據可以把WINCE6.0體繫結構分為硬體層、OEM層、作業系統層和應用程式層,這四層緊密合作,相互配合來完成從應用程式的調用到對硬體的操作和互動。
1. 硬體層
硬體平台的核心是嵌入式處理器,而嵌入式處理器的種類很多,處理能力和主頻的速度各有差異,如果要跑WINCE作業系統,需要處理器包含MMU單元。WINCE6.0支援的ARM、MIPS、x86、SHx這四種CPU體系,在這點上嵌入式linux支援更多CPU體繫結構的處理器。
2. OEM層
OEM(Original Equipment Manufacturer,原始裝置製造商)層位於WINCE的作業系統層和硬體層,主要的作用是對硬體進行抽象並且提供統一的介面讓作業系統來和硬體互動。OEM層主要包括OAL(OEM Abstraction Layer,OEM抽象層)、bootloader、設定檔和驅動程式。
3. 作業系統層
由圖1可知作業系統層包括Coredll、檔案系統、GWES、裝置管理員、驅動(分為使用者模式和驅動模式的驅動)、services服務和核心(Kernel)這些部分組成。
3.1 Coredll
coredll.lib,Coredll模組為其他WINCE模組提供核心(core)功能,此模組是WINCE作業系統的一個不可或缺的模組,但它不一定需要所有的組成部分。Coredll模組包含配置OS的結構體、宏定義、函數等重要的內容,這些資訊定義在Celog.h、Pkfuncs.h、Pwinreg.h、Pwinuser.h和Windbase.h標頭檔中,為了引入(import)這些功能,必須連結coredll.lib檔案。
Coredll模組包含很多部分,比如battery、cormain等部分,這些部分都是以lib的形式提供,具體看help文檔Developing an OS Design->Windows Embedded CE Moudules and Components->Common Windows Embedded CE Modules下的介紹。
WINCE有一個重要的設計思想就是所有的應用程式都不能直接與作業系統或是硬體打交道,如果應用程式需要訪問WINCE提供的服務,就只能通過coredll.dll來進行,也就是說如果我們要調用system API時不能直接調用,而是先轉到coredll.dll,由它幫我們去調用system API的。另外,WINCE系統除了有system API,同時也提供application API(類似於案頭windows系統的WIN32API),開發人員可以通過比如是LoadLibrary(TEXT("winsock.dll"))或在sources檔案的連結目標庫包含winsock.lib的方式來調用這些application
API,比如還有Wininet.dll、Msml.dll和Winhttp.dll等。
3.2 檔案系統(filesys.dll)
Filesys.dll主要實現檔案系統和儲存管理
圖2 filesys.dll的功能架構
3.3 GWES(gwes.dll)
WINCE把微軟WIN32 應用編程介面(API)、使用者介面(UI)和圖形裝置介面(GDI)的庫整合到圖形視窗和事件子系統模組(GWES)中,GWES是使用者、應用程式和OS之間的介面,它支援構成WINCE使用者介面的所有視窗、對話方塊、控制項、菜單和資源,還提供了游標、位元影像、文字和表徵圖資訊,GWES負責載入及管理HID驅動、顯示驅動和鍵盤驅動。
3.4 裝置管理員(device.dll)
裝置管理員被kernel載入並且一直運行,它負責載入、卸載和管理裝置驅動及他們的介面,當裝置管理員載入的時候,它同時載入I/O資源管理員來從註冊表中讀取可用資源清單。
4. 應用程式層
從系統的角度來看,每個應用程式都是WINCE中的一個單獨的進程,應用程式運行在優先順序較低的許可權下它使用作業系統提供的Win32 API來進行系統調用基互動。