摘自challengezcy博客
http://challengezcy.blog.163.com/blog/static/69229272200951810148574/
1. WinCE目錄
- (1)Private:WinCE OS核心程式碼,通常不需要修改,若需要修改需MS協助;
(2)Public:與硬體平台無關可共用的程式碼,與Private不同,屬可公開修改部分;
Public\Common\OAK\CSP包含高度整合周邊晶片,如RTC、controllers;
Public\Common\OAK\Drivers包含非內建驅動程式
(3)Platform:裝置相關檔案與程式碼,包含BSP套件,新增的BSP也是放在這後,於VSS加入
Platform\<PlatformName>為硬體相關驅動程式原始碼,如BSP drivers;
2.環境變數
- :Platform/Settings/Environment/New,或在建構命令中輸入 set <var>=<value>
3. build
影像檔建構程序:(1)Sysgen;(2)Build;(3)Buildrel;(4)makeimage
4. makeimg
- 產生影像檔時makeimg.exe會呼叫:
(1)cenlscmp.exe,結合nlscfg.inf、common.str、nlssrc.txt產生國際語系和地區設定的輸出檔wince.nls;
(2)fmerge.exe,合併common.bib、config.bib、project.bib、platform.bib為ce.bib(定義所有要包含到最終影像檔的檔案)。
合併common.reg、project.reg、platform.reg為reginit.ini(註冊檔資訊)。
合併common.dat、project.dat、platform.dat為initobj.dat(定義執行時間影像檔的檔案及資料夾目錄資訊)。
合併common.db、project.db、platform.db為initdb.ini(定義產生於object store裡的資料庫資訊);
(3)regcomp.exe,讀取reginit.ini檔並壓縮成二進制註冊檔Dfault.fdf;
(4)txt2ucde.exe,轉換fmerge.exe產生的initobj.tmp檔案ASCII文字為unicode,並存成為initobj.dat;
(5)romimage.exe,讀取ce.bib檔案以結合需要檔案成為nk.bin
5.檔名說明
- 檔名說明:*.bib為binary image builder file,其中config.bib定義核心記憶體類型及大小,
*.dat定義冷開機時RAM內檔案系統目錄、檔案和連結,
*.db定義冷開機時Object Store資訊,
*.reg定義冷開機時起始registry key
6.記憶體形式
:ROM(EPROM、EEPROM、Masked ROM)、RAM(DRAM、SRAM)、FLASH(NAND Flash、NOR Flash)
7.DispPerf.exe
DispPerf.exe的原始碼放在%_WINCEROOT%\Public\Common\OAK\INC,若要編譯,在WinCE 6.0環境的話,只要在VSS2005的Solution Explorer找到後,滑鼠右鍵後選「include from build」,但試過並未成功,所以還是類似WinCE 5.0的作法,以新增應用程式,並照著MSDN的步驟,複製貼上、修改include header,編譯成自己的DispPerf。
8.目前PND的顯示color depth多已做到65K或16.7M顏色,也就是15、16 bpp或24 bpp。
9.寫Display Driver
- 要寫Display Driver就是完成三十個DDI functions,然後用DispPerf檢查哪些適合軟體加速或硬體加速,配合幾個sample dirver看如何寫軟硬體加速。
10.FLAT Display Driver
- FLAT Sample Display Driver:VGA functionality、Color depths: 8, 16, 24, 32 bpp、Software acceleration、Source code: %_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\DISPLAY\VGAFLAT
10. Emulation library for software-accelerated blits
- :%_WINCEROOT%\Public\Common\OAK\Drivers\Display\Emul
11.ATI Sample Display Driver
- :GPE-based, 8, 16, 24, 32 bpp、800x600 and 16 bpp is tested、a mixture of software and hardware acceleration、Source code: %_WINCEROOT%\Public\Common\OAK\Drivers\Display\ATI
12.在WinXP上,可用dxdiag.exe得到DirectX的資訊、版本,在DirectX8.0時,已經沒有DirectDraw,被視為理所當然的包進Direct3D。但在DirectX7.0還有,但已經沒有更新資料與支援了。據說在DireCTX9.0會再出現,但用法不太相同。
13.
若要讓Display Driver支援DirectDraw,微軟建議Display Dirver自GPE完成,否則得看文件修改DDHAL Callback Function、DDHAL Marco、DDHAL Structures。若是用GPE,則只需改用DDGPE類別,修改HAL即可支援DirectDraw。
14.
顯示驅動程式透過DrvEnableDriver()將其他三十個Device Driver Interface (DDI) Functions的pointer傳回給GDI,所以只有DrvEnableDriver的function identifier不能改,其他的DDI Functions名字可以內部認到即可。API-to-DDI的對映和使用,詳見MSDN「Primary Display Drivers」、「DrvEnableDriver」和「DRVENABLEDATA」。除了DisplayInit(),在PIC顯示卡的環境,此一函式在GWES.exe載入顯示驅動程式時,首先執行檢查,比DrvEnableDriver更早,但此函式為條件式需要、對其他顯示卡非必要。另一個可能exposed的DDI是DrvGetMasks()函式。對於其他DDI函式,實做時符合Winddi.h的函式原型即可。