欢迎来到天天文库
浏览记录
ID:51823489
大小:100.50 KB
页数:6页
时间:2020-03-16
《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
此文档下载收益归作者所有