没遇到过这样的情况
点赞  2010-1-29 15:07
以下是成功的打印信息,不过几乎要加载全部的镜像大小:

OpenPartition: Partition Exists=0x1 for part 0x21.

BP_SetDataPointer at 0x0

ReadData: Start = 0x0, Length = 0xd0000a.

Log2Phys: Logical 0x500 -> Physical 0xa00

Windows CE Kernel for ARM (Thumb Enabled) Built on Feb  8 2007 at 23:36:51
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8c2013e0

Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
SDMMC config set rGPGCON: 20504
pdwXIPLoc = 0x8c33f000
pdwCurXIP = 0x8c33f000
dwNumXIPs = 0x2
pChainEntry = 0x8c33f004
XIP (8c200000 -> 8c372ed4) span
XIP (8c200000 -> 8c372ed4) span
XIP (8c200000 -> 8c372ed4) span
XIP (8c200000 -> 8c372ed4) span
XIP (8c200000 -> 8c372ed4) span
XIP (8c200000 -> 8c372ed4) span
ppte->dwVA = 0x8c000000
XIP (8c200000 -> 8c372ed4) span
ppte->dwVA = 0x8c000000
XIP (8c380000 -> 8cbba778) span
OEMInit Done...
Sp=ffffc7cc
NandFlash FMD_Init
NandFlash FMD_Init Done
I2S_Ini---
Prescaler:2
384 clock
lpMapFIFOdata[0]1: dwContext = 0xBAK_Init: dwContext = 0x602ed64
BacklightInitialize
BL_PowerOn
!!!!!!!!!!!! BACKLIGHT ON !!!!
BAK: IOCTL_POWER_CAPABILITIES
USB:OhcdPdd_Init
++InitializeOHCI
USB:*pIrq=11, *pioPortBase=0x450000
OHCD: MapIrq2SysIntr(11): 27
OHCD: Memory Object
--InitializeOHCI
USB enable interrutp





在InitRomChain打印信息

void InitRomChain(void)
{
        static                ROMChain_t        s_pNextRom[MAX_ROM] = {0};
        DWORD                dwRomCount = 0;
    DWORD       dwChainCount = 0;
    DWORD                *pdwCurXIP;
    DWORD       dwNumXIPs;
        PPTE ppte;
    DWORD dwEnd;
    ROMChain_t *pList;

    PXIPCHAIN_ENTRY pChainEntry = NULL;

        ppte = (PPTE) OEMAddressTable;
   
        if(pdwXIPLoc == NOT_FIXEDUP)
        {
        return;  // no chain or not fixed up properly
    }
//   lpWriteDebugStringFunc(TEXT("pdwXIPLoc = %x \r\n"));
        RETAILMSG(1,(TEXT("pdwXIPLoc = 0x%x \r\n"),pdwXIPLoc));
    // set the top bit to mark it as a virtual address
    pdwCurXIP = (DWORD*)(((DWORD)pdwXIPLoc) | 0x80000000);

        RETAILMSG(1,(TEXT("pdwCurXIP = 0x%x \r\n"),pdwCurXIP));
    // first DWORD is number of XIPs
    dwNumXIPs = (*pdwCurXIP);

        RETAILMSG(1,(TEXT("dwNumXIPs = 0x%x \r\n"),dwNumXIPs));

    if(dwNumXIPs > MAX_ROM)
        {
      lpWriteDebugStringFunc(TEXT("ERROR: Number of XIPs exceeds MAX\n"));
      return;
    }

    pChainEntry = (PXIPCHAIN_ENTRY)(pdwCurXIP + 1);

    RETAILMSG(1,(TEXT("pChainEntry = 0x%x \r\n"),pChainEntry));


    while(dwChainCount < dwNumXIPs)
    {
        if ((pChainEntry->usFlags & ROMXIP_OK_TO_LOAD) &&  // flags indicates valid XIP
            *(LPDWORD)(((DWORD)(pChainEntry->pvAddr)) + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
        {
            s_pNextRom[dwRomCount].pTOC = *(ROMHDR **)(((DWORD)(pChainEntry->pvAddr)) + ROM_SIGNATURE_OFFSET + 4);
            s_pNextRom[dwRomCount].pNext = NULL;

            if (dwRomCount != 0)
            {
                s_pNextRom[dwRomCount-1].pNext = &s_pNextRom[dwRomCount];
            }
            else
            {
                OEMRomChain = s_pNextRom;
            }
            dwRomCount++;
        }
        else
        {
            lpWriteDebugStringFunc( _T("Invalid XIP found\n") );
        }

        ++pChainEntry;
                dwChainCount++;
        }
        pList = OEMRomChain;

            for ( ; pList; pList = pList->pNext)
                {
                 for (; ppte->dwSize; ppte ++)
         {
        dwEnd = ppte->dwVA + (ppte->dwSize << 20);
                        if (IsInRange (pList->pTOC->physfirst, ppte->dwVA, dwEnd))
                        {
                if (IsInRange (pList->pTOC->physlast, ppte->dwVA, dwEnd))
                                {
                    // good XIP, break inner loop and go on to the next region
                                        RETAILMSG(1,(TEXT("ppte->dwVA = 0x%x \r\n"),ppte->dwVA));  
                                        RETAILMSG(1,(L"XIP (%8.8lx -> %8.8lx) span\r\n",
                    pList->pTOC->physfirst, pList->pTOC->physlast));
                    break;
                }
                        }
               
RETAILMSG(1,(L"XIP (%8.8lx -> %8.8lx) span\r\n",
                    pList->pTOC->physfirst, pList->pTOC->physlast));


         }
                 
        if (!ppte->dwSize)
                {
        RETAILMSG(1,(TEXT("doesn't exist in OEMAddressTab\r\n")));   
                }//*/
                }
}
点赞  2010-1-29 15:09
ppte->dwVA = 0x8c000000
XIP (8c200000 -> 8c372ed4) span 这个是XIPKERNEL地址 8C200000
ppte->dwVA = 0x8c000000
XIP (8c380000 -> 8cbba778) span 这个是NK 地址       8C340000

只加载4M的时候第二个为0
ppte->dwVA = 0x8c000000
XIP (8c200000 -> 8c372ed4) span
XIP (00000000 -> 00000000) span
XIP (00000000 -> 00000000) span
点赞  2010-1-29 15:13
OpenPartition: Partition Exists=0x0 for part 0x21.

CreatePartition: Enter CreatePartition for 0x21.

LastLogSector: Last log sector is: 0x1F61F,toal is: 0x1FB20.

CreatePartition: Start = 0x500, Num = 0x4BE0.

Log2Phys: Logical 0x500 -> Physical 0xA00

WriteMBR: MBR block = 0x28.

dwRegionStart: 0x8C200000, dwRegionLength: 0x97A77C, dwStoreOffset: 0x0
BP_SetDataPointer at 0x0

WriteData: Start = 0x0, Length = 0x97A77C.

Log2Phys: Logical 0x500 -> Physical 0xA00

Updateded TOC!
IsValidMBR: MBR sector = 0x500

OpenPartition: Partition Exists=0x0 for part 0xB.

CreatePartition: Enter CreatePartition for 0xB.

FindFreeSector: FreeSector is: 0x50E0 after processing part 0x21.

CreatePartition: Num sectors set to 0x1A400 to allow for compaction blocks.

CreatePartition: Start = 0x50E0, Num = 0x1A400.

WriteMBR: MBR block = 0x28.

-WriteRegionsToBootMedia
+TOC_Write
-TOC_Write
TOC {
dwSignature: 0x434F544E
BootCfg {
  ConfigFlags: 0x3830
  BootDelay: 0xF
  ImageIndex: 1
  IP: 0.0.0.0
  MAC Address: 00:00:00:00:00:00
  Port: 0.0.0.0
  SubnetMask: 255.255.255.255
}
ID[0] {
  dwVersion: 0x10002
  dwSignature: 0x45424F54
  String: 'eboot.nb0'
  dwImageType: 0x2
  dwTtlSectors: 0x100
  dwLoadAddress: 0x8C038000
  dwJumpAddress: 0x8C038000
  dwStoreOffset: 0x0
  sgList[0].dwSector: 0x240
  sgList[0].dwLength: 0x100
}
ID[1] {
  dwVersion: 0x1
  dwSignature: 0x43465348
  String: ''
  dwImageType: 0x2
  dwTtlSectors: 0x4BD4
  dwLoadAddress: 0x8C200000
  dwJumpAddress: 0x8C201000
  dwStoreOffset: 0x0
  sgList[0].dwSector: 0xA00
  sgList[0].dwLength: 0x4BD4
}
chainInfo.dwLoadAddress: 0X00000000
chainInfo.dwFlashAddress: 0X00000000
chainInfo.dwLength: 0X00000000
奇怪,这里都是零正常吗?
}

Jumping to image at virtual address 0x8C201000h
+ToPhysicalAddr:0x8C201000
-ToPhysicalAddr:0x30201000

::: Physical Launch Address: 0x30201000h
Windows CE Kernel for ARM (Thumb Enabled) Built on Feb  8 2007 at 23:36:51
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8c2013e0

Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
SDMMC config set rGPGCON: 20504
pdwXIPLoc = 0x8c33f000
pdwCurXIP = 0x8c33f000
dwNumXIPs = 0x2
pChainEntry = 0x8c33f004
XIP (8c200000 -> 8c3365a4) span
XIP (8c200000 -> 8c3365a4) span
XIP (8c200000 -> 8c3365a4) span
XIP (8c200000 -> 8c3365a4) span
XIP (8c200000 -> 8c3365a4) span
XIP (8c200000 -> 8c3365a4) span
ppte->dwVA = 0x8c000000
XIP (8c200000 -> 8c3365a4) span
ppte->dwVA = 0x8c000000
XIP (8c340000 -> 8cb7a77c) span
OEMInit Done...
Sp=ffffc7cc
NandFlash FMD_Init
NandFlash FMD_Init Done
I2S_Ini---
Prescaler:2
384 clock
lpMapFIFOdata[0]1: dwContext = 0xBAK_Init: dwContext = 0x602ed64
BacklightInitialize
BL_PowerOn
!!!!!!!!!!!! BACKLIGHT ON !!!!

各位高手帮看看啊~~~~~~~~~~~~艾
点赞  2010-1-29 16:38
学习,学习…
点赞  2010-1-29 16:51
帮顶 希望高手帮忙解决,关注----------
点赞  2010-1-29 16:52
仲夏夜兄弟。帮顶了。
点赞  2010-1-29 16:52
谢谢楼上几位朋友
点赞  2010-1-29 18:16
举世长贴呀,继续帮兄弟顶贴,嘿嘿…
点赞  2010-1-30 09:37
mark
主要看什么升级方式了。
我是用USB升级的。直接升级的是eboot.nb0和一个xip.nb0.
个人感觉是看引导程序怎么定的。
先mark下慢慢看。。。。
点赞  2010-1-30 10:14
12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复