在上一篇文章中,實現應用程序操作FLASH及更新Nboot。這篇討論應用程序更新NK,這個比更新Nboot要複雜一些。由於MINI2440不使用EBOOT,系統從SD卡系統後,Flash是沒有分區的,理論上NK.nb0不一定需要BINFS,但如果不使用BINFS,系統是啓動不了的,這讓我百思不得其解。。。
分區可使用BP_OpenPartition(),這個只能在驅動中使用,因此在FMD_OEMIoControl()加多一個Case, BP_OpenPartition()需要指定超始地址,長度,分區類型等。MINI2440第2塊寫TOC,第3塊到第19塊是BootLogo,第20塊開始纔是BINFS。SuperVivi燒入NK時可看到分區的一些信息,如下:
Enter your selection: w
Clear the free memory
Please send the Image through USB.
Download Address=0x80200000 Length=0x1a338e0
........................Done.
Low Level Format: Start = 0x1300(19 塊), Num = 0x7ed00(2029 塊)
.............................................................................................................................................................................................................Done.
Create Partition: Start = 0x1400(20 塊), Num = 0xd200(210 塊).
................................................Done.
Create Partition: Start = 0xe600(230 塊), Num = 0x6fd00(1789 塊).
...Done.
Start Windows CE...;
從上面得知,分了兩個區,第一個區爲BINFS ,第二區爲FAT 。
在調用BP_OpenPartition() 之前需調用BP_LowLevelFormat(),因爲BP_OpenPartition 會檢測MBR 。
BINFS 從第20 開始的,但友善燒NK 卻從第39 塊開始,想不明白?
第2 塊寫TOC ,可查看NBOOT 相關代碼
將TOC 寫在第2 塊,接下來就把NK.nb0 從第39 塊開始寫,NK文件太大,不能一次性將其讀入內存,可參考如何實現從SD卡更新NK ? 提到的分段讀寫NK 。
在寫NK 時,若遇到壞塊,需跳過,檢測是否爲壞塊可調用驅動中的IsBlockBad()
關鍵代碼:
----------------------------------------------------------
尊重他人勞動成果,轉載請標明出處http://www.cnblogs.com/feishanm