ü Block 0 has the NAND boot loader (NBOOT.BIN)
ü Block 1 is the TOC block which specifies the layout on the NAND
ü Block 2 is the start block for secondary bootloader
ü Block n is the start of image. n is defined in the block 1 structure
The layout on the first sector of TOC block is:
typedef struct _TOC_SECTOR {
DWORD dwSignature; // 4 bytes
IMAGE_DESCRIPTOR id[4]; // 480 bytes
UCHAR Pad[32]; // 32 bytes
} TOC_SECTOR, *PTOC_SECTOR;
几个文件中的定义都是一样的,下面的代码是我从里面拷贝下来的!与上面的有所不同!可能是版本不同吧!
typedef struct _TOC {
DWORD dwSignature;
BYTE udid[8]; //
// How to boot the images in this TOC 。This could be moved into the image descriptor if desired, . // but I prefer to conserve space.
BOOT_CFG BootCfg;
IMAGE_DESCRIPTOR id[MAX_TOC_DESCRIPTORS]; // Array of Image Descriptors.
// UCHAR Pad[12]; // align on SECTOR_SIZE
CHAININFO chainInfo;
} TOC, *PTOC; // 512 bytes
tocblock1 file,同样是使用SJF烧写到第一个(0为第一个)内存块的!
整个过程就很明显了:第一步,先烧写nboot.bin 到nand flash的第0个内存块!
第二步,烧写 tocblock1 file 到nand flash 的第一个内存块!
第三步,烧写 eboot.nb0 到nand flash 的第二块内存开始的地方!
EBOOT
BinFS
在移植使用BOOTLOADER下载镜像的时候我法相,他会调用EBOOT中的一段代码去对nand进行一些操作,主要工作是格式化nand并简历文件系统!这个文件系统就是ROM image filesystem(BINFS)二进制文件系统!也称之为闪存文件系统。
在EBOOT启动菜单中,我们会看到有两项是关于格式化FLASH的命令!一个是低格选项:
Low-level FORMAT Boot Media
他的代码解释如下:
// low-level format
// N.B: this erases images, BinFs, FATFS, user data, etc.
// However, we don't format Bootloaders & TOC bolcks; use JTAG for this.
另外一个是:Format Boot Media for BinFS
// format the boot media for BinFS
// N.B: this does not destroy our OEM reserved sections (TOC, bootloaders, etc)
// N.B: format offset by # of reserved blocks, decrease the ttl # blocks available by that amount.
主要理解一下Format Boot Media for BinFS的过程!
在选择了这个选项之后,他首先会判断flash是否存在,然后调用WINCE的库函数BP_LowLevelFormat。这个函数的原型:
BOOL BP_LowLevelFormat(
DWORD dwStartBlock,
DWORD dwNumBlocks,
DWORD dwFlags
);
文章还不是很完善,大家一起交流,如果问题,请提出来,大家一起塔讨论