3480|7

1

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

烧写系统的时候停留在了ROMHDR at Address,是怎么回事 [复制链接]

我在烧写nk文件的时候,超级终端已经提示:下载完成了,但是超级终端最后提示:ROMHDR at Address 80201044h 就不动了,怎么回事?我查了一些资料,似乎是地址的问题,我应该如何而去修改呢?修改config.bib文件吗?

最新回复

谢谢楼上的回答,我现在可以了,我开始在虚拟机上编译的PB,出现了问题,但是现在我不在虚拟机上了,在PC机上编译的PB,生成的nk文件就可以烧进去了。分都给你。  详情 回复 发表于 2009-10-26 10:32
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
没有人知道吗?
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
能不能详细的说一下,我没有弄过这个,烧录的入口在哪里?在哪个文件中啊?谢谢
如果方便可不可以加我qq:375308292.
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 3 楼 baiminsheng 的回复:
能不能详细的说一下,我没有弄过这个,烧录的入口在哪里?在哪个文件中啊?谢谢
如果方便可不可以加我qq:375308292.

一般情况下烧录部分的借口在oemlaunch中,解析的入口在downloadimage中
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
下面是blcommon.c中的BootloaderMain代码
void BootloaderMain (void)
{
    DWORD dwAction;   
    DWORD dwpToc = 0;
    DWORD dwImageStart = 0, dwImageLength = 0, dwLaunchAddr = 0;
    BOOL bDownloaded = FALSE;

    // relocate globals to RAM
    if (!KernelRelocate (pTOC))
    {
        // spin forever
        HALT (BLERR_KERNELRELOCATE);
    }

    // (1) Init debug support. We can use OEMWriteDebugString afterward.
    if (!OEMDebugInit ())
    {
        // spin forever
        HALT (BLERR_DBGINIT);
    }

    // output banner
    EdbgOutputDebugString (NKSignon, CURRENT_VERSION_MAJOR, CURRENT_VERSION_MINOR);

    // (3) initialize platform (clock, drivers, transports, etc)
    if (!OEMPlatformInit ())
    {
        // spin forever
        HALT (BLERR_PLATINIT);
    }

    // system ready, preparing for download
    EdbgOutputDebugString ("System ready!\r\nPreparing for download...\r\n");

    // (4) call OEM specific pre-download function
    switch (dwAction = OEMPreDownload ())
    {
    case BL_DOWNLOAD:
        // (5) download image
        if (!DownloadImage (&dwImageStart, &dwImageLength, &dwLaunchAddr))
        {
            // error already reported in DownloadImage
            SPIN_FOREVER;
        }

        bDownloaded = TRUE;

        // Check for pTOC signature ("CECE") here, after image in place
        if (*(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
        {
            dwpToc = *(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG));
            // need to map the content again since the pointer is going to be in a fixup address
            dwpToc = (DWORD) OEMMapMemAddr (dwImageStart, dwpToc + g_dwROMOffset);

            EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD)); // right after signature bms
        }

        // fall through
    case BL_JUMP:
        // Before jumping to the image, optionally check the image signature.
        // NOTE: if we haven't downloaded the image by now, we assume that it'll be loaded from local storage in OEMLaunch (or it
        // already resides in RAM from an earlier download), and in this case, the image start address might be 0.  This means
        // that the image signature routine will need to find the image in storage or in RAM to validate it.  Since the OEM"s
        // OEMLaunch function will need to do this anyways, we trust that it's within their abilities to do it here.
        //
        if (g_bBINDownload && g_pOEMCheckSignature)
        {
            if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, dwLaunchAddr, bDownloaded))
                HALT(BLERR_CAT_SIGNATURE);
        }
        // (5) final call to launch the image. never returned
        OEMLaunch (dwImageStart, dwImageLength, dwLaunchAddr, (const ROMHDR *)dwpToc);
        // should never return
        // fall through
    default:
        // ERROR! spin forever
        HALT (BLERR_INVALIDCMD);
    }
}
现在程序已经执行通过了DownloadImage函数,运行到了OEMMapMemAddr函数以后 就进入了该函数里面了。并且运行到            EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD));的时候就在超级终端显示了ROMHDR at Address 80201044h 就不动了,能给出进一步的解释吗?谢谢了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
我的平台是:2440+CE5.0
1、ROMHDR的定义是在bootloader的relocate_nkbin.c中定义如下:
typedef struct ROMHDR {
    ULONG   dllfirst;               // first DLL address
    ULONG   dlllast;                // last DLL address
    ULONG   physfirst;              // first physical address
    ULONG   physlast;               // highest physical address
    ULONG   nummods;                // number of TOCentry's
    ULONG   ulRAMStart;             // start of RAM
    ULONG   ulRAMFree;              // start of RAM free space
    ULONG   ulRAMEnd;               // end of RAM
    ULONG   ulCopyEntries;          // number of copy section entries
    ULONG   ulCopyOffset;           // offset to copy section
    ULONG   ulProfileLen;           // length of PROFentries RAM
    ULONG   ulProfileOffset;        // offset to PROFentries
    ULONG   numfiles;               // number of FILES
    ULONG   ulKernelFlags;          // optional kernel flags from ROMFLAGS .bib config option
    ULONG   ulFSRamPercent;         // Percentage of RAM used for filesystem
                                        // from FSRAMPERCENT .bib config option
                                        // byte 0 = #4K chunks/Mbyte of RAM for filesystem 0-2Mbytes 0-255
                                        // byte 1 = #4K chunks/Mbyte of RAM for filesystem 2-4Mbytes 0-255
                                        // byte 2 = #4K chunks/Mbyte of RAM for filesystem 4-6Mbytes 0-255
                                        // byte 3 = #4K chunks/Mbyte of RAM for filesystem > 6Mbytes 0-255

    ULONG   ulDrivglobStart;        // device driver global starting address
    ULONG   ulDrivglobLen;          // device driver global length
    USHORT  usCPUType;              // CPU (machine) Type
    USHORT  usMiscFlags;            // Miscellaneous flags
    PVOID   pExtensions;            // pointer to ROM Header extensions
    ULONG   ulTrackingStart;        // tracking memory starting address
    ULONG   ulTrackingLen;          // tracking memory ending address
} ROMHDR;
2、ROMHDR at Address 80201044h前的下载和解压缩都是在RAM中进行的,ROMHDR的出现说明解压缩已经完成,接下来可进行NANAFLASH的烧写了。
3、烧写的入口函数是mem_convert。
4、不知道你的开发平台是什么,故以上信息仅供参考,望有所帮助。

    该贴为本人eeworld的处女贴,O(∩_∩)O哈哈哈~
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 6 楼 baiminsheng 的回复:
下面是blcommon.c中的BootloaderMain代码
void BootloaderMain (void)
{
? ? DWORD dwAction;?
? ? DWORD dwpToc = 0;
? ? DWORD dwImageStart = 0, dwImageLength = 0, dwLaunchAddr = 0;
? ? BOOL bDownloaded = FALSE;

? ? // relocate globals to RAM
? ? if (!KernelRelocate (pTOC))
? ? {
? ? ? ? // spin forever
? ? ? ? HALT (BLERR_KERNELRELOCATE);
? ? }

? ? // (1) Init debug support. We can use OEMWriteDebugString afterward.
? ? if (!OEMDebugInit ())
? ? {
? ? ? ? // spin forever
? ? ? ? HALT (BLERR_DBGINIT);
? ? }

? ? // output banner
? ? EdbgOutputDebugString (NKSignon, CURRENT_VERSION_MAJOR, CURRENT_VERSION_MINOR);

? ? // (3) initialize platform (clock, drivers, transports, etc)
? ? if (!OEMPlatformInit ())
? ? {
? ? ? ? // spin forever
? ? ? ? HALT (BLERR_PLATINIT);
? ? }

? ? // system ready, preparing for download
? ? EdbgOutputDebugString ("System ready!\r\nPreparing for download...\r\n");

? ? // (4) call OEM specific pre-download function
? ? switch (dwAction = OEMPreDownload ())
? ? {
? ? case BL_DOWNLOAD:
? ? ? ? // (5) download image
? ? ? ? if (!DownloadImage (&dwImageStart, &dwImageLength, &dwLaunchAddr))
? ? ? ? {
? ? ? ? ? ? // error already reported in DownloadImage
? ? ? ? ? ? SPIN_FOREVER;
? ? ? ? }
? ? ? ? bDownloaded = TRUE;

? ? ? ? // Check for pTOC signature ("CECE") here, after image in place
? ? ? ? if (*(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
? ? ? ? {
? ? ? ? ? ? dwpToc = *(LPDWORD) OEMMapMemAddr (dwImageStart, dwImageStart + ROM_SIGNATURE_OFFSET + sizeof(ULONG));
? ? ? ? ? ? // need to map the content again since the pointer is going to be in a fixup address
? ? ? ? ? ? dwpToc = (DWORD) OEMMapMemAddr (dwImageStart, dwpToc + g_dwROMOffset);

? ? ? ? ? ? EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD)); // right after signature bms
? ? ? ? }

? ? ? ? // fall through
? ? case BL_JUMP:
? ? ? ? // Before jumping to the image, optionally check the image signature.
? ? ? ? // NOTE: if we haven't downloaded the image by now, we assume that it'll be loaded from local storage in OEMLaunch (or it
? ? ? ? // already resides in RAM from an earlier download), and in this case, the image start address might be 0.? This means
? ? ? ? // that the image signature routine will need to find the image in storage or in RAM to validate it.? Since the OEM"s
? ? ? ? // OEMLaunch function will need to do this anyways, we trust that it's within their abilities to do it here.
? ? ? ? //
? ? ? ? if (g_bBINDownload && g_pOEMCheckSignature)
? ? ? ? {
? ? ? ? ? ? if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, dwLaunchAddr, bDownloaded))
? ? ? ? ? ? ? ? HALT(BLERR_CAT_SIGNATURE);
? ? ? ? }
? ? ? ? // (5) final call to launch the image. never returned
? ? ? ? OEMLaunch (dwImageStart, dwImageLength, dwLaunchAddr, (const ROMHDR *)dwpToc);
? ? ? ? // should never return
? ? ? ? // fall through
? ? default:
? ? ? ? // ERROR! spin forever
? ? ? ? HALT (BLERR_INVALIDCMD);
? ? }
}
现在程序已经执行通过了DownloadImage函数,运行到了OEMMapMemAddr函数以后 就进入了该函数里面了。并且运行到? ? ? ? ? ? EdbgOutputDebugString ("ROMHDR at Address %Xh\r\n", dwImageStart + ROM_SIGNATURE_OFFSET + sizeof (DWORD));的时候就在超级终端显示了ROMHDR at Address 80201044h 就不动了,能给出进一步的解释吗?谢谢了

看一下OEMLaunch 中执行到了哪里?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 7 楼 guopeixin 的回复:
看一下OEMLaunch 中执行到了哪里?

谢谢楼上的回答,我现在可以了,我开始在虚拟机上编译的PB,出现了问题,但是现在我不在虚拟机上了,在PC机上编译的PB,生成的nk文件就可以烧进去了。分都给你。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表