EBoot启动流程分析.doc

EBoot启动流程分析.doc

ID:51823489

大小:100.50 KB

页数:6页

时间:2020-03-16

EBoot启动流程分析.doc_第1页
EBoot启动流程分析.doc_第2页
EBoot启动流程分析.doc_第3页
EBoot启动流程分析.doc_第4页
EBoot启动流程分析.doc_第5页
资源描述:

《EBoot启动流程分析.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Image_cfg.h中地址定义的一点说明:有很多地址中包含PACAUA含义分别是,PA代表DRAM的物理地址,CA代表经过MMU映射后的虚拟地址,UA代表经过MMU的基础上增加了Cache后的地址。Source文件中定义了BootLoader的入口StartUp,在Startup.s文件中。u最开始,先了解Startup.s引用的一些头文件和库。INCLUDEkxarm.h//arm架构相关定义INCLUDEregister_map.incINCLUDEimage_cfg.inc;内存地址映射相关宏定义IMPORTInitClockCONforBLIMPORTI

2、nitCacheTEXTAREAINCLUDEoemaddrtab_cfg.incuIMPORTmainLEAF_ENTRYStartUp;LEAF_ENTRY代表程序从该处开始执行bResetHandler;跳转到ResetHandler标号处执行ResetHandler中主要工作有:1、检查启动模式,如果MMU已经使能,不执行后续操作,直接跳转到VirtualStart处执行(步骤8),否则初始化MMU;------------------------------------;Checkbootmode;------------------------------

3、------mrcp15,0,r0,c1,c0,0tstr0,#1bneVirtualStart;IftheMMUisalreadyenabled,wedon'tneedtoinitializeH/W.(normalboot:STEPLDR-BL2-EBOOT);IftheMMUisdisabled,continuetointializeH/W.(EBOOT.nb0)2、关中断3、设置异常向量位置到04、初始化Cache5、初始化TZPC6、初始化用于NANDFlash的GPIO口7、初始化MMU,地址空间重新映射8、VirtualStart标号处,擦除BootLoa

4、derRAM,擦除Bootloader堆栈9、初始化堆栈10、跳转到main函数处执行u1、之后函数会调准到main->BootloaderMain()函数中执行,BootloaderMain函数并不需要修改,该函数在platformcommonsrccommonbootblcommonBlcommon.c中实现1、虽然这部分是common部分的代码,但是调用到main.c中的函数,这相当于common中的Blcommon.h中约定了接口定义,具体接口在main.c中实现。将全局变量搬移到RAM中去//relocateglobalstoRAMif(!Ker

5、nelRelocate(pTOC)){//spinforeverHALT(BLERR_KERNELRELOCATE);}ROMHDR*constpTOC是一个特殊的结构体指针,通过pTOC我们就可以知道拷贝哪些代码和数据段到RAM中去。2、接下来调用OEMDebugInit函数,用于初始化调试端口,一般都是串口,该函数执行过后,我们就可以使用OEMWriteDebugString打印调试信息了。if(!OEMDebugInit()){//spinforeverHALT(BLERR_DBGINIT);}该函数的实现在ebootmain.c中BOOLOEMDebugIn

6、it(void){//给函数指针赋值,用于blcommon调用g_pOEMVerifyMemory=OEMVerifyMemory;//VerifyRAM.g_pOEMMultiBINNotify=OEMMultiBINNotify;//串口初始化,该函数与OAL公用OEMInitDebugSerial();return(TRUE);}OEMInitDebugSerial不在main.c中实现,接口定义在PLATFORMCOMMONSRCSOCS5PV210_SEC_V1OALINCdbgserial.h中3、调用OEMPlatformInit,初始化平

7、台设备,包括时钟、设备驱动、传输等等。if(!OEMPlatformInit()){//spinforeverHALT(BLERR_PLATINIT);}该函数实现在ebootmain.c中,主要流程如下:1)初始化BSP参数OALArgsInit((BSP_ARGS*)IMAGE_SHARE_ARGS_UA_START);2)初始化中断InitializeInterrupt(),platformsmdkv210srcbootloaderbl1_uart路径下Interrupt.c文件中实现2)如果定义了SDMMC_BOOT宏,则初始化SD

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。