在上一篇文章中,实现应用程序操作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