Windows Embedded Compact 7初體驗
Windows Embedded Compact 7已經出來半年多了,一直沒時間搞。最近它又出了Refresh的版本,電腦也換了個1T的硬盤,所以就下載下來體驗一把。
先說說開發環境的搭建。Platform Builder 7.0作為VS2008的一個插件使用,且與之前所有版本的WinCE開發環境都不兼容,需獨立安裝。所以,我搭建WinCE7.0開發環境的步驟如下:
- 安裝VMWARE WorkStation 7
- 在虛擬機上安裝Windows 7
- 安裝VS2008及SP1
- 安裝Windows Embedded Compact 7
以前在學習新版本WinCE的時候,一般都是先基於模擬器定制一個系統,但WinCE7.0目前是不支持的Device Emulator的,大概是因為它只支持ARMv5及其之后的處理器,而Device Emulator還是ARMv4的。目前項目中使用的處理器是ARM11的,屬於ARMv6,於是就打算直接往這個平台上移植看看。
WinCE7.0的新特性及移植說明,在安裝目錄下有相關的pdf文檔做介紹。從它提供的文檔來看,WinCE6.0到WinCE7.0的移植相對比較簡單。而WinCE5.0到WinCE7.0的移植會麻煩一些,建議先從WinCE5.0移植到WinCE6.0,然后再從WinCE6.0移植到WinCE7.0。
目前項目使用的是WinCE6.0,所以就拿6.0的BSP作為模板來移植了。移植方法與《S3C2410-WinCE6.0-OAL的快速調試》介紹的類似。將6.0的BSP拷貝到Platform目錄下,然后通過Platform Builder 7.0克隆出一個新的BSP,並修改Catalog文件中相應的Item屬性,將ARMv4改為ARMv6。另外,修改Files目錄下的Platform.bib和Platform.reg文件,清空這兩個文件的內容。修改SRC目錄下的dirs文件,去除BOOT和Drivers對應的目錄。這么做的目的就是想快速移植WinCE7.0的OAL,先讓WinCE7.0的內核跑起來,然后再慢慢移植各個驅動。
WinCE7.0創建工程的方法與WinCE6.0的類似。基於Custom Device的模板創建一個工程,並設置平台屬性,由於一直沒在6.0上驗證過這個BSP的KITL,所以這里也就先把KITL給禁用了。設置完平台屬性后使用Clean Sysgen編譯系統。運氣好的話,編譯不出問題,直接生成NK。燒寫到設備上,就起來了。系統啟動后的打印信息如下。
ProcessorType = 0b76 Revision = 6 CpuId = 0x410fb766
OEMAddressTable = 80203b80
[KERNEL ] + OEMInit()
[KERNEL ]DCache: 128 sets, 4 ways, 32 line size, 16384 size
[KERNEL ]ICache: 128 sets, 4 ways, 32 line size, 16384 size
[KERNEL ]CHIPID[ 156 ][acda17d0]
[KERNEL ] - OEMInit()
NKStartup done, starting up kernel. nCpus = 1
Windows CE KernelInit
Error Reporting Memory Reserved, dump size = 00020000
Booting Windows CE version 7.00 for (ARM)
Memory Configuring: Total pages: 36278 , Filesystem pages = 4534
Booting kernel with clean memory configuration:
Total Memory Sections: 1
[ 0 ] ( static ): start: 83a26000, extension / attributes: 00024000 , length: 08db6000
Scheduling the first thread.
PID: 00400002 TID: 00410002 PGPOOL: Reserved 768 pages for Loader pool
PID: 00400002 TID: 00410002 PGPOOL: Reserved 256 pages for File pool
PID: 00400002 TID: 00410002 ERROR: OALIoCtlHalGetDeviceInfo: Invalid request
PID: 00400002 TID: 00410002 OSAXST0: Platform Name = WinCE6. 0 R3
PID: 00400002 TID: 00410002 WARN: OALIoCtlHalGetDeviceinfo::SPI_GETPROJECTNAME: Bu
ffer too small
PID: 00400002 TID: 00410002 OSAXST1: >>> Loading Module ' kd.dll ' ( 0xC0401DB0 ) at a
ddress 0xEFFE0000 - 0xEFFFE000 in Process ' NK.EXE ' ( 0x83A09AD0 )
PID: 00400002 TID: 00410002 KD: Starting kernel debugger software probe (KdStub) -
KD API version 27
PID: 00400002 TID: 00410002 OSAXST1: >>> Loading Module ' NK.EXE ' ( 0x83A09AD0 ) at a
ddress 0x80200000 - 0x80217000 in Process ' NK.EXE ' ( 0x83A09AD0 )
PID: 00400002 TID: 00500002 Filesys doesn ' t exist, no app started
至此,就初步完成了WinCE7.0 OAL的移植。雖然還沒有看到WinCE7.0的界面,但也總算初步了解了Platform Builder 7.0。接下來可以移植顯示、觸摸驅動,進一步揭開WinCE7.0的面紗