注意:
创建多个文件分区与C:\WINCE500\PLATFORM\SMDK2443\Src\Bootloader\Eboot\nand.cpp和C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BOOTPART\bootpart.cpp文件有关。
1 创建多个同种文件系统的分区的时候会调用C:\WINCE500\PLATFORM\SMDK2443\Src\Bootloader\Eboot\nand.cpp里的BP_OpenPartition函数,来实现创建文件分区的功能,如下实例可以创建一个10MB的PART_DOS32的文件分区
hPartEx1 = BP_OpenPartition( NEXT_FREE_LOC,
SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(10*1024*1024))*PAGES_PER_BLOCK, // align to block
PART_DOS32,
TRUE,
PART_OPEN_ALWAYS);
2 BP_OpenPartition函数会再调用C:\WINCE500\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BOOTPART\bootpart.cpp里的GetPartitionTableIndex函数,来识别BP_OpenPartition创建的文件分区是否已经创建过,如果创建过,WINCE50就不会再创建新的同种类型的文件分区
3 因为GetPartitionTableIndex函数的缘故,所以理论上同种类型的文件分区只能创建一个,但是也可以通过修改BP_OpenPartition的参数再创建一个两个同种类型的文件分区,如下实例可以创建一个10MB和一个5MB的PART_DOS32的文件分区
hPartEx1 = BP_OpenPartition( NEXT_FREE_LOC,
SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(10*1024*1024))*PAGES_PER_BLOCK, // align to block
PART_DOS32,
TRUE,
PART_OPEN_ALWAYS);
OALMSG(TRUE, (TEXT("createpartition_2_ok_eboot_update\n")));
hPartEx2 = BP_OpenPartition( NEXT_FREE_LOC,SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(5*1024*1024))*PAGES_PER_BLOCK, // align to block
PART_DOS32,
FALSE,
PART_OPEN_ALWAYS);
4 如果需要创建3个以上的文件分区,可以创建两个同种类型的文件分区,再创建几个不同种类的文件分区来实现,如下实例可以创建一个10MB和一个5MB的PART_DOS32的文件分区,还有一个用剩余所有NAND flash的存储空间创建的一个PART_DOS3_FAT的文件分区
hPartEx1 = BP_OpenPartition( NEXT_FREE_LOC,
SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(10*1024*1024))*PAGES_PER_BLOCK, // align to block
PART_DOS32,
TRUE,
PART_OPEN_ALWAYS);
OALMSG(TRUE, (TEXT("createpartition_2_ok_eboot_update\n")));
hPartEx2 = BP_OpenPartition( NEXT_FREE_LOC,
SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(5*1024*1024))*PAGES_PER_BLOCK, // align to block
PART_DOS32,
FALSE,
PART_OPEN_ALWAYS);
OALMSG(TRUE, (TEXT("createpartition_3_ok_eboot_update\n")));
hPartEx3 = BP_OpenPartition( NEXT_FREE_LOC,USE_REMAINING_SPACE,
PART_DOS3_FAT,
TRUE,
PART_OPEN_ALWAYS);