mobile的boot loader之框架和预览

        微软精心设计一套和具体硬件无关的bootloader 软件框架,此框架包含以下几个部分:

(1)BLCOMMON;

(2)OEM代码;

(3)EBOOT特定代码;

(4)存储管理代码;

(5)EDBG驱动程序;

      这五部分代码的开发程度如下:

(1)blcommon 是OEM用户不能修改的,代码存放在%WINCEROOT%/PUBLIC/COMMON/OAK/DRIVER/ETHDOG/BLCOMMON

(2)oem代码需要用户自行实现;

(3)EBOOT代码,以太网操作相关的函数;

(4)存储管理,存储分区,以及FLASH驱动,存放在%WINCEROOT%/PUBLIC/COMMON/OAK/DRIVER/ETHDOG/bootpart

(5)EDBG驱动程序,OEM用户有可能需要进行修改,%WINCEROOT%/PUBLIC/COMMON/OAK/DRIVER/ETHDOG

     

      进入EBOOT之后,首先运行的是Main函数,Main函数的实现非常的简单:
void main(void)
{
      BootloaderMain();
      / / Should never get here.
      SpinForever();
}

常用的函数的功能如下:

StartUp() :CPU最先执行的函数。也就是启动代码。

BootLoaderMain() :先后调用KernelRelocate、OEMDebugInit、OEMPlatformInit、OEMPreDownload等函数。

KernelRelocate():把镜像中的全局变量Copy到Ram中,该过程完成之后,其他模块才能正常访问保存的全局数据。

OEMDebugInit() :初始化串口。

OEMPlatformInit() :执行特定平台的初始化工作,如时钟、一些驱动程序。EBoot的菜单选项就在这个里面实现的。

OEMPreDownload() :做下载前的准备工作。根据用户在菜单中的选择,判断是下载还是直接启动。

DownloadImage() :下载操作系统镜像到RAM或者Flash。

OEMLaunch() :负责启动镜像。

OEMReadData() :从远程计算机读取数据,并判断是从USB下载还是从SD下载。SD下载的大部分的功能实现都是仿照USB下载来完成的,如果EBOOT中没有USB下载可以仿照,也可以仿照网络下载,实现方式都是大同小异。只是FAT文件系统和SD读写需要自己实现。
OEMMapMemAddr() :专用于写Flash时使用。因为写flash的速度非常慢,所以此函数将Flash镜像临时缓冲到RAM中。

OEMShowProgress() :从函数名就能看出。

OEMIsFLashAddr() :判断一个地址是否是Flash的地址。

OEMFinishEraseFlash() :判断是否完成了擦除Flash内容工作。

OEMWriteFlash() :写镜像到Flash。

OEMStartEraseFlash() :开始擦除Flash。

OEMContinueEraseFlash() :继续擦除Flash工作。

 

      图示如下:

mobile的boot loader之框架和预览_第1张图片

 

参考原文:http://blog.csdn.net/basonjiang_sz/archive/2010/05/17/5599295.aspx

参考原文:http://blog.csdn.net/hejianhua/archive/2010/01/15/5194280.aspx

参考原文:http://blogold.chinaunix.net/u1/56388/showart_2493569.html

你可能感兴趣的:(框架,工作,Flash,存储,mobile,化工)