WinCE Bootloader学习笔记之Bootloader框架(转)

http://blog.csdn.net/luocan1986/archive/2009/12/30/5106255.aspx


以下代码都是基于s3c2440的,WinCE Bootloader。

从Startup.s汇编中的b  main 指令,就跳转到了Bootloader的C语言部分的main函数,C部分开始运行。这一部分的主要工作框架图如下:

 

 

 

 

 

其实首先是跳转到Main()函数,如下:

void main(void)

    // Clear LEDs.

    OEMWriteDebugLED(0, 0x3);                  //初始化LED,这个可以不用去看。

   

    // Common boot loader (blcommon) main routine.

    BootloaderMain();                       //Bootloader的主要流程是在这里完成的,详见上图。

 

    // Should never get here.

    SpinForever();                                //不可能运行到这里。

}

 

在Main()函数中调用了BootloaderMain()函数,这里有意思的部分就开始了。一来就给我这种菜鸟初学者一个大陷阱。代码如下:

void BootloaderMain (void)

{

   //......................省略...........................................

    // relocate globals to RAM

    if (!KernelRelocate (pTOC))              //拷贝全局变量到RAM

    {

        // 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 ()             //为下载准备一些初始化工作

{

             //......................暂时省略,后面会分析...........................................

             //......................知道OEMLaunch在这里调用就好.....................

OEMLaunch (dwImageStart, dwImageLength,

dwLaunchAddr, (const ROMHDR *)dwpToc);  //启动内核

}  

}

 

 

框架大概就是这样,具体函数分析在后面的文章给出。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/luocan1986/archive/2009/12/30/5106255.aspx

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值