欢迎来到天天文库
浏览记录
ID:27570553
大小:106.05 KB
页数:7页
时间:2018-12-03
《eboot启动流程分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Image_cfg.h屮地址定义的一点说明:有很多地址屮包含PACAUA含义分别是,PA代表DRAM的物理地址,CA代表经过MMU映射后的虚拟地址,UA代表经过MMU的基础上增加了Cache后的地址。Source文件屮定义fBootLoader的入口Startup,在Startup.s文件屮。♦最开始,先了解Startup.s引用的一些头文件和库。INCLUDEkxarm.h//arm架构相关定义INCLUDEregister_map.incINCLUDEimage_cfg.inc;内存地址映射相关宏定义IMPORT工nitClockCONforBLIMPORTInitCa
2、cheTEXTAREAINCLUDEoemaddrtab_cfg.inc♦IMPORTmainLEAF_ENTRYStartup;LEAF_ENTRY代表程序从该处开始执行bResetHandler,•S兆转至UResetHandler标号处执行ResetHandler中主要工作有:1、检査启动模式,如果MMU己经使能,不执行后续操作,直接跳转到VirtMlStart处执行(步骤8),否则初始化MMUf•••-Checkbootmodermrcpl5,0,rO,cl,cO,0tstr0,#1bneVirtualStart;IftheMMUisalreadyenabled,wed
3、on'tneedtoinitializeH/W.(normalboot:STEPLDR-BL2-EBOOT);IftheMMUisdisabled,continuetointializeH/W.(EBOOT.nbO)2、关中断3、设置异常向量位置到04、初始化Cache5、初始化TZPC6、初始化用于NAMDFlash的GPIO口7、初始化MMU,地址空间重新映射8、VirtualStart标号处,擦除BootLoaderRAM,擦除Bootloader堆桟9、初始化堆栈10、跳转到main函数处执行♦1、之函数会调准到main-〉BootloaderMain()函数中执行,B
4、ootloaderMain函数并不需要修改,该函数在platformcommonsrccommonbootblcommonBlcommon.c屮实现2、虽然这部分是co誦on部分的代码,但是调用到main.c屮的函数,这相当于common中的BIcommon,h中约定了接口定义,具体接口在main.c中实现。将全局变量搬移到RAM中去//relocateglobalstoRAMif(!KernelRelocate(pTOC)){//spinforeverHALT(BLERR_KERNELRELOCATE);}ROMHDR*constpTOC是一个特殊的结构体指针,通
5、过pTOC我们就可以知道拷贝哪些代码和数据段到RAM中去。3、接下来调用OEMDebuglnit函数,用于初始化调试端口,一般都是串口,该函数执行过后,我们就可以使用OEMWriteDebugString打印调试信息了。if(!OEMDebuglnit()){//spinforeverHALT(BLERR_DBGINIT);}该涵数的实现在ebootmain.c中BOOLOEMDebuglnit(void){//给函数指针赋值,用于blcommon调用g_pOEMVerifyMemory=OEMVerifyMemory;//VerifyRAM.g_pOEMMultiBINNo
6、tify=OEMMultiBINNotify;//串口初始化,该函数与OAL公用OEMInitDebugSerial();return(TRUE);}OEMInitDebugSerial不在main,c屮实现,接口定义在PLATFORMCOMMONSRCSOCS5PV210_SEC_VlOALINCdbgserial.hr
7、_14、调用OEMPlatformlnit,初始化平台设备,包括吋钟、设备驱动、传输等等。if(!OEMPlatformlnit()){//spinforeverHALT(BLERR_PLATINIT);}该函数实现在ebootmain.c屮
8、,主要流程如下:1)初始化BSP参数OALArgsInit((BSP_ARGS*)IMAGE_SHARE_ARGS_UA_START);2)初始化中断Initializelnterrupt()zplatformsmdkv210srcbootloaderbll_uartS各径下Interrupt.c文件中实现3)如果定义了SDMMC_BOOT宏,则初始化SDHC,为从SD卡启动做准备#ifde£SDMMC_BOOTi£(!SDHC—INIT()){一0ALMSG(TRUE,(TEXT(
此文档下载收益归作者所有