在EBOOT里面的main.c中有变量g_pBootCfg,请问是在哪里初始化的?

koala98222   2009-7-3 12:11 楼主
如题,只看到有定义的地方:PBOOT_CFG                g_pBootCfg;
没找到在哪里初始化的,请知道的大侠指点一下吧!
千万不要因为我的问题过于幼稚而将之过滤...

回复评论 (7)

如果代码里找不到的话,注意一下是不是在bib文件里作为FIXUPVAR初始化的。
点赞  2009-7-3 12:43
不过我看你这个参数似乎是一个config data,是什么芯片上面的初始化程序?
点赞  2009-7-3 12:44
引用: 引用 2 楼 codewarrior 的回复:
不过我看你这个参数似乎是一个config data,是什么芯片上面的初始化程序?

就是WinCE5.0下三星2440的EBOOT里面的,有对这个参数的使用,我找不到在哪里初始化的,所以一头雾水啊
点赞  2009-7-3 12:46
在EBOOT目录下的nand.cpp文件中的BootConfigInit()函数有对该变量的定义,楼主不妨看看你的EBOOT下有没有。
// Set default boot configuration values
static void BootConfigInit(DWORD dwIndex)
{

    EdbgOutputDebugString("+BootConfigInit\r\n");

    g_pBootCfg = &g_pTOC->BootCfg;

    memset(g_pBootCfg, 0, sizeof(BOOT_CFG));

    g_pBootCfg->ImageIndex   = dwIndex;

    g_pBootCfg->ConfigFlags  = BOOT_TYPE_MULTISTAGE;        //CONFIG_FLAGS_DEBUGGER

    g_pBootCfg->BootDelay    = CONFIG_BOOTDELAY_DEFAULT;

        g_pBootCfg->EdbgAddr.wMAC[0] = 0x0000;
        g_pBootCfg->EdbgAddr.wMAC[1] = 0x1232;
        g_pBootCfg->EdbgAddr.wMAC[2] = 0x1233;

    g_pBootCfg->SubnetMask = inet_addr("255.255.255.0");

    EdbgOutputDebugString("-BootConfigInit\r\n");
    return;
}
点赞  2009-7-3 13:07
应该是由FLASH存储,EBOOT启动后调用上楼的函数赋初值的,改变后就需要更新FLASH,下次启动就是读入新的数据并更新。
点赞  2009-7-3 16:03
我的EBOOT就有这个函数(传入的参数就是楼主关心的全局变量的指针):
static BOOL LoadEBootCFG(EBOOT_CFG *EBootCFG)
{

    if (!FlashRead(EBOOT_FLASH_CFG_START, (PUCHAR)EBootCFG, sizeof(EBOOT_CFG)))
    {
        EdbgOutputDebugString("ERROR: LoadEBootCFG: failed to load configuration.\r\n");
        return(FALSE);
    }

    // Is the CFG data valid?  Check for the magic number that was written the last time
    // the CFG block was updated.  If Eboot has never been run, there will be no configuration
    // information, so the magic number will likely not be found.  In this case, setup the
    // factory defaults and store them into Flash.
    //
    if (EBootCFG->ConfigMagicNumber != EBOOT_CFG_MAGIC_NUMBER)
    {
        ResetDefaultEBootCFG(EBootCFG);
    }

    // Make sure a valid debug serial port address (physical) was found.
    //
    if (g_EbootCFG.dwDbgSerPhysAddr == 0)
    {
        g_EbootCFG.dwDbgSerPhysAddr = BULVERDE_BASE_REG_PA_FFUART;
    }

    return(TRUE);
}
点赞  2009-7-3 16:04
要学习一下
点赞  2010-1-5 10:41
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复