EBoot启动流程分析_第1页
EBoot启动流程分析_第2页
EBoot启动流程分析_第3页
EBoot启动流程分析_第4页
EBoot启动流程分析_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、;内存地址映射相关宏定义J;LEAF ENTRY代表程序从该处开始执行mrcp15,0,r0, c1, c0,0tstr0,#1bneVirtualStartwe continue;If the MMU is already enabled, dont need to initializeH/W.(normal boot : STEPLDR-BL2-EBOOT) ; If the MMU is disabled, to intialize H/W.Image_cfg.h中地址定义的一点说明:有很多地址中包含 PACAUA含义分另1J是,PA代表DRAM的物理地址,CA代表经过 MMU映射后的虚

2、拟地址,UA代表经过MMU的基础上增加了 Cache后的地址。Source 文件中定义了 BootLoader 的入口 StartUp ,在 Startup.s文件中。最开始,先了解Startup.s引用的一些头文件和库。INCLUDE kxarm.h/arm 架构相关定义INCLUDEregister_map.incINCLUDEimage_cfg.incIMPORT InitClockCONforBLIMPORT InitCacheTEXTAREAINCLUDE oemaddrtab_cfg.incIMPORT mainLEAF_ENTRY StartUpb ResetHandler ;跳

3、转到 ResetHandler标号处执行ResetHandler中主要工作有:1、检查启动模式,如果MMU已经使能,不执行后续操作,直接跳转到VirtualStart处执行(步骤8),否则初始化mmuJ; Check boot mode(EBOOT.nb0)2、关中断3、设置异常向量位置到 04、初始化Cache5、初始化tzpc6、初始化用于 NAND Flash 的GPIO 口7、初始化MMu地址空间重新映射8、VirtualStart 标号处,擦除 BootLoader RAM,擦除 Bootloader 堆栈 9、初始化堆栈10、跳转到main函数处执行函数中执行,Bootloader

4、Main1、之后函数会调准到main-BootloaderMain()数并不需要修改,该函数在platformcommonsrccommonbootblcommonBlcommon.c中实现2、虽然这部分是common部分的代码,但是调用到main.c 中的函数,这相当于common中的Blcommon.h中约定了接口定义,具体接口在 main.c中实现。将全局变量搬移到 RAM中去/ relocate globals to RAM if (!KernelRelocate (pTOC) / spin forever HALT (BLERR_KERNELRELOCATE);ROMHDR *c0n

5、stpTOC是一个特殊的结构体指针,通过 pTOC我们就可以知道拷贝哪些代码和数据段到RAM中去。3、接下来调用OEMDebUgInit 函数,用于初始化调试端口,一般都是串口,该函数执行过后,我们就可以使用OEMWriteDebugString打印调试信息了。if (!OEMDebugInit () / spin foreverHALT (BLERR_DBGINIT);该函数的实现在ebootmain.cBOOL OEMDebugInit(void)给函数指针赋值,用于g_pOEMVerifyMemory g_pOEMMultiBINNotifyblcommon 调用=OEMVerifyMe

6、mory;=OEMMultiBINNotify;/ Verify RAM.串口初始化,该函数与0AL公用OEMInitDebugSerial();return(TRUE);OEMInitDebugSerial 不在main.c 中实现,接口定义在PLATFORMCOMMONSRCSOCS5PV210_SEC_V1OALINCdbgserial.h中4、调用OEMPlatformInit ,初始化平台设备,包括时钟、设备驱动、传输等等。if (!OEMPlatformInit () / spin forever HALT (BLERR_PLATINIT);该函数实现在eb00tmain.c中,主

7、要流程如下:1 )初始化bsp参数 OALArgsInit(BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);2)初始化中断 InitializeInterrupt(), platformsmdkv210srcbootloaderbl1_uart路径下 Interrupt.c文件中实现3)如果定义了 SDMMC_BOOT宏,则初始化SDHC,为从SD卡启动做准备#i fM SDMNC JQOTif ( I SDHC 工 NITO) -OALMSG CTRUE,仃。TERROR: HSNMCIni t Failed. rrt*);SpinFor ever (); el

8、se (OALMSG (TRUE, (TEXT (WKSMMC Imt SuccessH !rn*)n;#if 1SEHCREAD (AISSTARTSECTOH, SECTOMFAIS, 0JINT32) (ftAddressInfoSectorB ;if (gkddreEsInfoSftctor. dwSigRature ! - 0 x53c5d5dJgAddressIntoSector. dwSigRature = 0 x53c5d5d;gL_MdrssInfoSector. diBootimag&StartSctor = Og_kddrEsIntoSctor. dwBaotlmageT

9、otalSactor = 0;gL-AddrssInfoSector. d*Fl4sKIfageStartS4ct&r = 0;gAddrssInizoStctor. dwf 1 ashlm aeT otalSect or = D;OALMSG Cim, (TEXT (*# Address Info Sector xs not fuwwd八/); fesdif *ndi f4)初始化flash,为后期内核下载至FLASH做准备 初始化flashBP_Init(LPBYTE)BINFS_RAM_START,BINFS_RAM_LENGTH, NULL, NULL,NULL)该函数在 piatfo

10、rmsmdkv2l0srcbootloaderbootpart_sdmmc路径下的Bootpart.cpp 中实现,BP_Init 中通过FMD_Init初始化一块儿内存。初始化 FLASH后,BINFS_RAM_START指向的位置用来存放 MBR信息,BINFS_RAM_LENGTH代表初 始化内存的大小。初始化成功后,将g_bB00tMediaEXiSt全局变量置为TRUE,表示引导媒体已经找到(flash),然后将FLASH相关信息存入全局变量,如下:I E.士上U。l 工七 TRUI.#ifnd( EDMM:_B(30T / Git m+4 i n FMD_GtIro (ig_Tla

11、ShIrT0) t -JALflSGCl. (TEI? t_GetInfo 2 failed rin*D):WR_F0KEVER; )/ EfcUU?曰tibal vari Lbles rslater! to the NANB tliih rmoiry 工pee_UIIM nF 即“蛉- -FUThfm &杯sKI.NkbZBYTES_?ER_BICK = c.Fl*3KIno dwMPtrBLock_5ECTORS_rfltEinCK flaihlnfo vSsetarsFa-BlockBYTES ?ER SECTOR = FlisH&fo wDataBytesPerSictor. fdif

12、5)获取TOC (Table of Content)信息,TOC是用于描述OS Image的结构体,通常在 FLASH中的一段block中存储,启动时,EBOOT需要获取OS Image相关的信息来启动 操作系统,获取的信息主要有起始地址、长度、虚拟地址等。if (TOC_Read() = FALSE) /读取TOC信息,如果不成功则使用模式设置 / use defaultsettingsTOC_Init();TOC_Write();TOC结构定义如下: typedef struct _TOC /How to bootthe imagesin thisTOC./This couldbe mov

13、ed intothe image descriptorif/but I preferto conservespace.BOOT_CFGBootCfg;/Image引导配置,网络设备地址DWORDdwSignature; /TOC 的验证码desired,/ Array of Image Descriptors.IMAGE_DESCRIPTOR idMAX_TOC_DESCRIPTORS; /Image 描述组CHAININFO TOC, *PTOC;chainInfo; /多个image bin时的链接彳巨息 / NAND_SECTOR_SIZEImage描述组结构定乂如下:/ File ve

14、rsion infoDWORD dwVersion;DWORD dwSignature;UCHAR ucStringMAX_PATH;/ Note: Our NAND uses H/W ECC, so no checksum needed. typedef struct IMAGE DESCRIPTOR /编译版本号/ e.g: EBOT, CFSH, etc/ e.g: PocketPC_2002”DWORD dwImageType;/Image类型,nk.nb0 是 0 x04DWORDdwTtlSectors;/Image文件用到的扇区总数DWORD dwLoadAddress;/ima

15、ge加载时的虚拟地址DWORD dwJumpAddress;/image加载完后的跳转地址/Image 段描述,起始扇区号,扇区SG_SECTOR sgListMAX_SG_SECTORS; 数目等ULONG dwStoreOffset;/ byte offset - not neededremove! IMAGE_DESCRIPTOR, *PIMAGE_DESCRIPTOR;代码中包含从flash和SD卡两种引导方式,此处先关注从FLASH引导的流程。/获取TOC信息TOC_Read()-FMD_ReadSector(TOC_SECTOR, (PUCHAR)g_pTOC, &si, 1)更新

16、全局变量和引导相关参数,如下:/ mpdite cur configg_j)BootCfg -也uTOC海。七CEx:/ cach image type白音eT他卓=g_jT0C_i AdwT&cErtry dInac&Type;OALHSGCTRUE, CTEKT C Slffi ImaeeTyDe: Ox%x liAn), ImageType);/ Update BSFmAKGS from TOC stored in stcrafr./ 写中lup stsrfid UAL Loe Mawk stredl in eboot configur4tion g_pBSF Ar gs- dwC AL

17、Lo gM k = g_pBootCfg-d*LogNask;_p?SFArgs-bV&DEWS(5 .= gL_pBcotCf - WEeBRHS(J;gLPBSF Ar gs_ bKITLB c & t= s_pBoctCfg-bKITLBoot;g_j)BSFArgs-MdTLTyp e - g_pBoctCfg- KITLType;SLjBSFAr gs-bCl taxihoo t = g rBootCfg- bClfiBoot;gjjBSFAr5s-fUp dateMod- g_pBoctCfg- fUpdateMod;gjBSFAr ?s-bFflStri 式 M 殴 = jE。t

18、CffbMcSeri 虱MM;OALLogSetZoaeE (g_pBSFAr 5e- dwOALLo jfll ask);for (i = 0; iJ_FAKLWI; i+)(g_pBSFArg5-dwDrvNsgMaski = gjBaotCfg-dwDrvN5gMakti;6)Initialize the displaystatic void InitializeDisplay(UINT16data)7)打印启动消息/ U: plw aet- mmw e hiJt. th* Mt-sJbfl &t by prictirif ui? ky an ewi ftl tim ikl lIclfC

19、t* 1D=1-b 5 _tlv j ,Zfi 的 nnU)电3.w = S if EcelCfCenfigKl S C0J?IJULj5 IJ7LJ-pEir*r=-/hitl.lC&DfitfLa5,(_pB5T耻屿-Rn 二 L1c i J iCjJifitn.iCi ft 1117,717? JTTTr)U,LWbrJ SUL. CiHlEXItilL t Il3m in stcr ti lt FJ_iik er ALE Lt eia:il. rn rJ jQALiCQtSLE.匕餐1 HnCOLJimtihif in晓e ln.5 in 龌 &虻ar心 *1 luulDil )k)JrIniLVT仆 tKIE C中T 匕wc INTTM1 . J dunikLM nor 皿【配3: to c&i.c?l 匕、11上UALW5G 匚 SUE, 亡 iXI “ Ir Ynlm xting i na 西 vr*44 ir. awed依 二,E*,tD*ldj*二等待用户按键中断引导OS,进去bootloader 菜单,BootDelay为等待的时间。若等待时间内没有相关按键按下,则继续执行。Allow the usr to into the boctlcader mgnu, while (dwCurrTi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论