当前位置: 代码迷 >> WinCE >> WinCE6.0 開機後燒錄NK的步骤
  详细解决方案

WinCE6.0 開機後燒錄NK的步骤

热度:308   发布时间:2016-04-28 12:32:13.0
WinCE6.0 開機後燒錄NK的方法
吃飽太閒,來發各文章好了
目的:
S5PV210 BSP WinCE6.0
讓WinCE6.0開機進入shell後還能燒錄NK的方法
通常開發板都是透過工具然後在eboot階段燒錄NK
但是這對一各產品而言不實用
我們的產品配備有一各PC開發工具,會有一各更新OS的功能
所以需要在WinCE6.0開機進入shell後還能燒錄NK的方法
我敎大家怎嚜實現

過程:
一般而言都只有在eboot才能夠燒錄NK Image
利用什麼Dragin V1.26.2.exe還是DNW.exe來弄
要在WinCE6.0開機進入shell後還能燒錄NK

首先記得空板子第一次燒錄OS的時候
記得你在切割NandFlash區塊的時候,建議切割固定的OS區塊,固定的User區塊
當然這需要改程式c:\WINCE600\PLATFORM\SMDKV210\SRC\BOOTLOADER\EBOOT\nand.cpp
WriteFlashNK函式裡面BP_OpenPartition配固定大小就可以解決
然後記得OS區塊之前的部份block要打上FMD_SetBlockStatus的BLOCK_STATUS_RESERVED狀態

然後寫Code支援fmd ioctl可以跳過微軟filesystem直接存取NandFlash block
#define IOCTL_XXX_READBLOCK             IOCTL_DISK_USER(13)
#define IOCTL_XXX_WRITEBLOCK            IOCTL_DISK_USER(14)
#define IOCTL_XXX_ERASEBLOCK            IOCTL_DISK_USER(15)
#define IOCTL_XXX_GETBLOCKSTATUS        IOCTL_DISK_USER(16)
c:\WINCE600\PLATFORM\SMDKV210\SRC\COMMON\NANDFLASH\FMD\fmd.cpp
FMD_OEMIoControl函式增加上面功能
利用函式FMD_GetBlockStatus,FMD_ReadSector,FMD_WriteSector,FMD_EraseBlock
這些函式來組合這些功能
程式應該會寫吧

再來是燒錄NK最好按照bootpart.cpp步驟

是否為bad block,是就跳過到下一各block
IS_BLOCK_UNUSABLE(dwBlock)

讀block資料,目的是為了sectorinfotable
這各內容在partition建立時,有特殊的值,也就是logic sector number會被寫入
ReadBlock(dwBlock, NULL, g_pSectorInfoBuf)

抹除block
FMD_EraseBlock(dwBlock)

燒錄block
WriteBlock(dwBlock, pbBuffer, g_pSectorInfoBuf)


再來看看nk.bin內容 , 因為nk.bin內容是Record壓縮格式
直接燒錄到NandFlash是不能使用的

可以打開VS2005->PB6.0環境的DOS CMD下輸入
Viewbin –toc nk.bin > output.txt
Viewbin –r nk.bin > output1.txt

可以看到些重要的資料,需要去填寫到eboot控管的TOC Block內容
這樣Lanuch NK的時候才會正確

Image Start = 0x80020000, length = 0x028839E8
Start address = 0x80027E9C
Checking record #166 for potential TOC (ROMOFFSET = 0xFE975FC8)
Checking record #256 for potential TOC (ROMOFFSET = 0xFF469FC8)
Checking record #259 for potential TOC (ROMOFFSET = 0xFF47C020)
Checking record #313 for potential TOC (ROMOFFSET = 0x00000000)
Found pTOC  = 0x8289efe0
ROMOFFSET = 0x00000000

ROMHDR ----------------------------------------
    DLL First           : 0x4001C001  
    DLL Last            : 0x41DCC119  
    Physical First      : 0x80020000  
    Physical Last       : 0x828A39E8  
    RAM Start           : 0x828B0000  
    RAM Free            : 0x828BF000  
    RAM End             : 0x86B00000  
    Kernel flags        : 0x00000000  
    Prof Symbol Offset  : 0x00000000  
  相关解决方案