WinCE的快速启动
PXA270上的雙啟動功能已經實現了,但又引入了一個新問題,WinCE的啟動太慢,大概需要2分鐘!這顯然是不能忍受的。通過兩天的努力,現在已經縮短到20秒,雖然還是有點長,但已改善不少了。先整理一下,免得忘了,有時間再做優化。
????? WinCE啟動慢的主要原因是從NAND FLASH中加載NK到內存特別慢,這幾乎占了99%的時間,而加載完NK后的啟動其實是挺快的。所以要縮短啟動時間,可以通過縮小NK來實現,因為NAND FLASH的讀寫速度是一定的,沒有太大的改善空間。
????? WinCE中提供了Multi-BIN的功能,它將整個內核映像分成幾部分,在WinCE啟動時可只加載核心部分,這樣就能有效提高WinCE的啟動速度。
??????要實現Multi-BIN,必須做兩部分的修改,一是EBOOT,另外一個是映像。下面就簡要說一下這兩部分實現時的要點和注意點。
EBOOT中需要支持BINFS,這在先前做雙啟動時已經留好了路,沒什么問題。
EBOOT中需要支持Multi-BIN的下載和燒寫,這一部分可參考幫助文檔的相關部分。
映像的修改,首先是bib文件,配置各部分的大小,并設定NK.bin中包含的文件,需要注意的是FLASH的驅動(nandflash.dll)必須包涵在NK.bin中。在定制系統時,需要添加BINFS、FATFS、ROMONLY的FS和HIVE-BASEED的注冊表。修改NANDFLASH的注冊表配置,使其在BOOTPHASE 0加載。整個過程,代碼的修改比較少,除了EBOOT中需要修改一些代碼外,映像只需修改幾個配置文件。
需要注意的是調試Multi-BIN的映像最好不要用Debug的方式編譯下載,否則會出現一堆可怕的打印信息,摘錄如下:
0x83d16000: BINFS: InitVolume - Signature of ROM Header does not Match- Assuming Chain Region
0x83d16000: FLASHDRV.DLL:L2P_GetPhysicalSectorAddr() - Secondary table doesn't exist for logical sector 0x11689!!!
等這些打印信息完成,得要好幾分鐘。用Release的方式編譯則不會有這個問題。Debug模式下,為什么會出現這些,還不清楚,有時間再看吧。
貼兩張效果圖,實現MULTI-BIN前后SDRAM的大小比較。
這是采用MULTI-BIN時,SDRAM的大小,60M Bytes。
沒有采用MULTI-BIN時,只有35M Bytes。
這兩幅圖表明,MULTI-BIN除了能提高WinCE啟動的速度,還能增加WinCE的可用內存。這是MULTI-BIN的另外一個重要作用。
除了MULTI-BIN能提高WinCE的啟動速度外,優化啟動時驅動的加載也能提高WinCE的啟動速度。一般情況下,驅動的加載都很快,可以不予考慮。但在驅動加載很費時間時,如果通過異步的方式加載驅動,那將給用戶帶來極速體驗,5秒鐘進入WinCE界面!
、、============在CSDN里發貼問到的======================
30m的話你的NK是中文的吧??
如果是中文的添加Agfa AC3 Font Compression\GB18030 Dta Converter\simsun&nsimsun(subset 2_50)?
這樣大概可以小10M左右?
另外你的BSP都調試確定沒有問題之后,生產的時候可以將那些串口打印信息都屏蔽掉,還會省一點時間。
增加字體壓縮組件,如LS所說是一個可行的方法
如果CPU速度低于300MHZ,Agfa AC3 Font Compression最好不要選,這樣仍然可以比默認的減小7M左右
你的意思是不用設置下面的這個菜單了??
要設置,只是上邊選組件的時候選的字體比PB默認選的中文字體小,并且Agfa AC3 Font Compression是壓縮字庫的。?
我目前16M
相應的Boot程序也得跟著改,如果NK是10M,Boot上電只讀10M。這樣開機Boot讀NK到內存速度快,NK啟動速度也快。可以控制在10秒內
可以修改下啟動文件,在NANDFLASH中存放nk.bin,在copy時將nk.bin釋放到ram中,這樣的話會快點。
IE瀏覽器也有幾兆,還有那些JSCRIPT,去掉一些組件,目前我的壓縮到18M了?
如果用XIP會不會速度快點,或者調試注冊表的信息。具體的我也不清楚,但是我想內核大和啟動速度應該不是完全對應的吧!
調試信息,設備管理器加載驅動的多少等,也影響啟動速度。所以注冊表和BSP都要瘦身!
從NANDFLAG拷貝到SDRAM的時候很慢,要大概15S,運行的時候不慢。?
所以問大家如何把WINCE剪小。?
另外我重新編譯的時候,發現NK.NB0并沒有變小,字節長度一樣,但NK.BIN卻小很多了,?
補充下(未測試):?
==================================================?
下載NK.NB0的時候,先清空SDRAMD的內潤NB0后面的NULL數據都不下了,然后直接運行。?
======================================================?
如何在不刪除必要組件的前提下減小內核文件長度??
1是自定義組件?
2是壓縮字庫。?
首先,NK.BIN中的內容是被壓縮過的,NK.NB0中的內容是沒有壓縮的。?
兩者大小的區別是因為在生成過程中BIN會將你設定的后面的NULL自動去掉,而NB0就不會。?
NB0的大小就是第三個變量ROMSIZE所設置的大小。?
由于nk.nb0是非壓縮的數據,里面的數據就是NK展開以后在內存里面的數據。?
而nk.bin是有壓縮的數據,里面的數據是壓縮以后類似于成塊形的數據,被loader拷貝到內存以后沒有區別。?
由于bin文件需要解壓,因而其下載方式也不一樣,?
通常,通過串口直接下載用nb0,pb下載用bin。
其次,nk.nb0是可以直接燒到FLASH/ROM中的,是代碼鏡像,可以直接跳轉到其入口執行。?
而nk.bin是Microsoft binary image格式的文件,必須按其格式定義解開到其指定的地址空間的位置才能執行。
75、如何在不刪除必要組件的前提下減小內核文件長度????
?? 要減小內核文件長度首先要在使用PB的定制內核向導中選擇自定義,也就是說對于每個組件都由自己來選擇,而不是選擇PB的標準配置。但減小內核文件長度最有效最直接的辦法是縮小字體,尤其對于東亞字體,采用字體壓縮技術并且選擇合理的字庫文件將明顯縮小文件長度。???
1)、在定制內核時選擇AGFA AC3 Font Compression組件。SYSGEN變量為SYSGEN_AGFA_FONT。???
2)、參考標題為“East Asian Font Versions”的幫助文檔,從中選擇你需要的字庫文件加到內核中,從文檔可以看出加AC3壓縮比不加壓縮在文件長度方面差距很大。
總結
以上是生活随笔為你收集整理的WinCE的快速启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用java程序for循环打印菱形_编写J
- 下一篇: x210烧写流程(inand)