开发WinCE设备更新工具过程--详记

最近在开发一款嵌入设备,基于WinCE5.0,使用的是SamSung的2416 cpu,基于2450的bsp。

 

首先是要了解eboot的详细流程,

main->BootloaderMain()

 

在看到第一句就碰到问题了,如下代码。

if (!KernelRelocate (pTOC))
{
    // spin forever
    HALT (BLERR_KERNELRELOCATE);
}

其中pToc唯一的赋值地方是在blcommon.c的声明,

ROMHDR * volatile const pTOC = (ROMHDR *)-1;     // Gets replaced by RomLoader with real address

查了很多资料后,大概知道是romimage.exe给他做了赋值,具体的过程有待进一步了解。

 

 

///

// 关于NandFlash擦除操作相关说明

对于NandFlash目前进行的分区如下:

1.保留区

    保留区分为如下几部分:

    1)Stepldr

    2)TOC

    3)EBOOT

2.BINFS

    这是第一个分区,用于存储系统,NK.bin,在保留区的后

3.FAT1

    这是第二个分区,用于存储driver

4.FAT2

    这是第三个分区,用于存储应用程序

5.FAT3

    这是第四个分区,属于用户数据区

6.开机画面

    此区域用于存储开机画面的数据,不计入分区中。

 

如何标记保留区的块为保留块?

SectorInfo si;

// to keep bootpart off of our reserved blocks we must mark it as bad, reserved & read-only
si.bOEMReserved = OEM_BLOCK_RESERVED | OEM_BLOCK_READONLY;
si.bBadBlock    = BADBLOCKMARK;
si.dwReserved1  = 0xffffffff;
si.wReserved2   = 0xffff;

OALMSG(TRUE, (TEXT("Reserving Blocks [0x%x - 0x%x] .../r/n"), 0, IMAGE_START_BLOCK-1));

//给保留区域写入标志
for (i = 0; i < RESERVED_BOOT_BLOCKS; i++) {
    FMD_WriteSector(i, NULL, &si, 1);
}

BOOL FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors): 这个函数用于写nandflash的一个扇区。对于nandflash来说,分大page和小page,大page是2048个bytes一页,小page是512个bytes一页。所以大page每个扇区有2048 bytes,小page每个扇区有512 bytes。

    startSectorAddr: nandflash物理扇区的起始地址,对于nandflash来说,就是nandflash中从哪个page开始。

    pSectorBuff:扇区数据buffer,从nandflash中写入的每一个扇区的数据都存放在这个buffer中。

    pSectorInfoBuff:扇区信息buffer,一般每个扇区的信息会被保存在nandflash的带外数据中,针对小page,带外数据有16 bytes,大page有64 bytes。从nandflash的带外数据将该扇区的相关信息读出来,存放在这个buffer中。

 

pSectorInfoBuff参数读取相应sector状态,如果pSectorInfoBuff参数为NULL则读写sector数据。pSectorBuff为非NULL则读写sector状态。

 

 

 

///

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值