




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Image_cfg.h中地址定义的一点说明:有很多地址中包含 PACAUA含义分别是,PA代表DRAM的物理地址,CA代表经过MMU 映射后的虚拟地址,UA代表经过MMU的基础上增加了 Cache后的地址。Source 文件中定义了 BootLoader 的入口 StartUp,在 Startup.s 文件中。 最开始,先了解 Startup.s引用的一些头文件和库。INCLUDE kxarm.h/arm 架构相关定义INCLUDEregister_map.i ncINCLUDE image_cfg.inc;内存地址映射相关宏定义IMPORT Ini tClockCONforBLIMPORT
2、InitCacheTEXTAREAINCLUDE oemaddrtab_cfg.i ncIMPORT mai nLEAF_ENTRY StartUp ;LEAF_ENTRY代表程序从该处开始执行bResetHandler ; 跳转到 ResetHandler标号处执行ResetHa ndler中主要工作有:1、检查启动模式,如果MMU已经使能,不执行后续操作,直接跳转到VirtualStart处执行(步骤8),否则初始化 MMUCheck boot modemrcp15, 0, rO, c1, cO, 0tstr0, #1bne VirtualStart; If the MMUis alrea
3、dy enabled, wedont n eed to i nitialize H/W.(n ormal boot : STEPLDR-BL2-EBOOT);If the MMU is disabled,continueto i ntializeH/W. (EBOOT. nb0)2、关中断3、 设置异常向量位置到04、初始化Cache5、初始化TZPC6、初始化用于 NAND Flash 的GPIO 口7、初始化MMU地址空间重新映射8、VirtualStart标号处,擦除 BootLoader RAM, 擦除 Bootloader 堆栈9、初始化堆栈10、跳转到ma in函数处执行函数中执行
4、,BootloaderMain函数1、之后函数会调准到mai n-BootloaderMai n()并不需要修改,该函数在platformcom mon srccom monbootblcom monBlcom mon.c中实现2、 虽然这部分是 common部分的代码,但是调用到ma in .c 中的函数,这相当于common中的Blcommo n.h中约定了接口定义,具体接口在ma in .c 中实现。将全局变量搬移到 RAM中去/ relocate globals to RAMif (!KernelRelocate (pTOC)/ spin foreverHALT (BLERR_KERN
5、ELRELOCATE);ROMHDR*constpTOC是一个特殊的结构体指针,通过pTOC我们就可以知道拷贝哪些代码和数据段到RAM中去。3、 接下来调用 OEMDebugl nit函数,用于初始化调试端口,一般都是串口,该函数执行过后,我们就可以使用OEMWriteDebugStri ng打印调试信息了。if (!OEMDebugI nit ()/ spin foreverHALT (BLERR_DBGINIT);该函数的实现在 ebootmai n.c 中BOOL OEMDebugI nit(void)/给函数指针赋值,用于blcommon调用g_pOEMVerifyMemory = O
6、EMVerifyMemory; / Verify RAM. g_pOEMMultiBINNotify = OEMMultiBINNotify;/串口初始化,该函数与 OAL公用OEMI ni tDebugSerial();return(TRUE);OEMI ni tDebugSerial不在ma in .c 中实现,接口定义在PLATFORMCOMMONSRCSOCS5PV21O_SEC_V1OALINCdbgserial.h中4、 调用OEMPIatformlnit,初始化平台设备,包括时钟、设备驱动、传输等等。if (!OEMPlatformI nit ()/ spin foreverHA
7、LT (BLERR_PLATINIT);该函数实现在 ebootmain.c中,主要流程如下:1) 初始化BSP参数OALArgsI nit(BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START);2) 初始化中断 In itializeI nterrupt(),platformsmdkv210srcbootloaderbl1_uart路径下 In terrupt.c文件中实现3) 如果定义了 SDMMC_BOOT宏,则初始化 SDHC,为从SD卡启动做准备SBnNIC_BOOTi ( ISBKC_I肛TO)OALNSGffRUE, ffET CERROR: HSHNIC
8、_Init Failed Vrn*)L SpirJ ar ever 0 :elseOAIHSCrKUE, (TEXT (HSMMC Imt Success! I#i1SDHC_KEAD (AISSTARTSECTOE, SECTOEOFAIS, (la町32)(ftAddressInfoSector);i t (g_AddrsEInfoSec t&r. dwSigitature ! = 0M53c5(15d)g_AddreEsInoSector. dwSinature - 0x53cEd5d; e_AddrslnfoSector dwEvotimgeStartgEutmr = D: g_Add
9、rsEs!noSectetr. dwBc*tImagsT*talSeetftr = 0;_Addre5 slnfoSec t or JwFlshlinagfStartSect or - D;_AddresInoSector. dwFlashlmageTotalSectsr 二 0: OAJJ11SG(TRVE ffEXT (*# Address Info Sector is not fusd!;#endi f#endlf4) 初始化FLASH,为后期内核下载至FLASH做准备初始化FLASH设备BP_I nit(LPBYTE)BINFS_RAM_START,BINFS_RAM_LENGTH,
10、NULL, NULL, NULL)该函数在 platformsmdkv210srcbootloaderbootpart_sdmmc路径下的Bootpart.cpp中实现,BP_Init 中通过FMD_Init 初始化一块儿内存。初始化 FLASH后,BINFS_RAM_START 指向的位置用来存放 MBR信息,BINFS_RAM_LENGTH 代表初始 化内存的大小。初始化成功后,将 g_bBootMediaExist全局变量置为 TRUE,表示引导媒体已经找到(FLASH),然后将FLASH相关信息存入全局变量,如下:I IkExist = TRUE;#indef SDMMC.BOOT/
11、Get flsh infoif (!FMD_(Jetlnft(Xe_FLhlno) _OALNISGQ, (TEXT (FMB* failed. VrXn*):SFIN_FOEEER; _/ EBOOT global v&riallsto ths NAHD flash memory sp&c_NUM OF BLOCKS = Flashlnfs dwMBlccks:_BYnS FER_EL0CK = g_KLaEhIno. dwByUsF&rElock: _SECTOES_rER_BIICK = gjFlaKhlnfa wSactorF er Block; _BYTES PER SECTOR -
12、 5_Fla5hInfo. wDtaBytesFerSector;#enai5) 获取TOC( Table of Content)信息,TOC是用于描述 OS Image的结构体,通常在FLASH 中的一段block 中存储,启动时,EBOOT需要获取OS Image相关的信息来启动操作系统, 获取的信息主要有起始地址、长度、虚拟地址等。if (TOC_Read() = FALSE) /读取TOC信息,如果不成功则使用模式设置/ use default setti ngsTOC_I nit();TOC_Write();TOC结构定义如下:typedef struct _TOC DWORDdwS
13、ig nature; /TOC的验证码/ How to boot the images in this TOC./ This could be moved into the image descriptor if desired,/ but I prefer to con serve space.BOOT_CFG BootCfg; /Image引导配置,网络设备地址/ Array of Image Descriptors.IMAGE_DESCRIPTOR idMAX_TOC_DESCRIPTORS; /Image描述组CHAININFOchainlnfo; /多个 image bin时的链接信
14、息 TOC, *PTOC; / NAND_SECTOR_SIZEImage描述组结构定义如下:/ Note: Our NAND uses H/W ECC, so no checksum needed.typedef structM AGE_DESCRIPTOR / File versio n infoDWORD dwVersio n;/编译版本号DWORD dwSig nature;/ e.g: EBOT, CFSH, etcUCHAR ucStringMAX PATH; / e.g: PocketPC 2002DWORD dwImageType; / ImageDWORD dwTtlSect
15、ors; / ImageDWORD dwLoadAddress; / imageDWORD dwJumpAddress;/ imageSG_SECTOR sgListMAX_SG_SECTORS;目等类型,nk.nb0 是 0x04文件用到的扇区总数加载时的虚拟地址加载完后的跳转地址/Image段描述,起始扇区号,扇区数ULONG dwStoreOffset; / byte offset - not needed - remove! IMAGE_DESCRIPTOR, *PIMAGE_DESCRIPTOR;代码中包含从FLASH和SD卡两种引导方式,此处先关注从 FLASH引导的流程。/获取T
16、OC信息TOC_Read()-FMD_ReadSector(TOC_SECTOR, (PUCHAR)g_pTOC, &si, 1)/更新全局变量和引导相关参数,如下:/ update our boot config_pBootCfg = & gjTQC-BootCfe;/ cche i m&ga typag ImaeTy|e = gjTQC- d z dwTocEntry. dwImaeType;OMJflSGCTRijE, (TEKT (* SVff厂叭犁Type: Ox%x Ar), ImagsTyps);/ Updat BSF_ARGS from TOC stored in storag
17、;./ Setup stored QAL Log Mk stored in ebot configuration e pBSPAr gs- xdwOALLo g|l ask = gpBootCfg-dwLogHaak;gjBSr Ar s- bUs eBKVNK = gpB o o tC f g- b Vs eDRVMSG;gBSF Ar c s- bKITLB c t= uBootCfg-bKTTLEoot;g_pESPAr gs- MdTLTyp e - gpBootCfg-J-KITLType; g_pBSrArgs-bCleai0oot- gL_P0ootCfg-bCleaiBoot:
18、g_pESP Ar gs- Up da.t eM o de= gpBootCfg- fUpdat eMode:gLjESFArgs-bfl.jSer elMSG二 gL_pBootCg-bFoSftri alWS*;.C kLLo 奋屯1CL me s (g_pBSf Ar gz-dOALXo 缈 a sk);for (i = 0; iBootDelay 二 5;if (g_pBoctCfg-Coifcf i gflags & CONFIG.FUWE.nTUg_BSPAre-kiil flags 二 OAL.KITLFLfeGSJHABLZD | OALEITLJLAGS.VMI肛:0ALMS
19、G (jUALJMFOj, (TEXT i-nLiJlags= kt tl. l&gs la,g_pBsstCg ;Canfigfla.g.s, gjBSPArga-ki tl flags),if (gpBeotCfg-mfigflags & BOOT_TYFEJIRECT)OAUSG (TKVE, I OALRSG (TRUE, elser(TEXT (*PresE ENTER to launchstored in Flash or SFACE to cancel. VrSjs*):CTEXT (*rnlni ti ating image launch in *SW Eeconds.Bout
20、Delay一).0A11EG CTEITE,OAMSG (TRUE,QEXT (IreEE ENTER to download now or SFACE to c:=tncel. rVn*) a GEXT (*r.nlni ti ating inage dowiiluad in %d secondsBoOtDelay ;等待用户按键中断引导 OS,进去bootloader 菜单,BootDelay为等待的时间。若等待时间内没有相关按键按下,则继续执行。/ Allow th色 us*r to brtak into bcotloider menu.while ( (dwCurrTimfi - dwtartTiime)毛 g_pEootC fg-B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版合同管理员聘用合同
- 2025聘用图书馆管理员的合同
- 2025茶叶购销合同范本
- 2025国际贸易公司合同模板
- 2025工程设计合同样本
- 果品、蔬菜种植的农业可持续发展模式考核试卷
- 自行车制造中的环境友好材料考核试卷
- 涂料生产过程中的能源管理考核试卷
- 空调器耐腐蚀性能提升考核试卷
- 汽轮机运行中的经济性能分析考核试卷
- 2023-2024年《劳务劳动合同样本范本书电子版模板》
- 中国居民口腔健康状况第四次中国口腔健康流行病学调查报告
- MOOC 数据挖掘-国防科技大学 中国大学慕课答案
- 中药注射剂合理使用培训
- 第13课+清前中期的兴盛与危机【中职专用】《中国历史》(高教版2023基础模块)
- 2024年国家粮食和物资储备局直属事业单位招聘笔试参考题库附带答案详解
- 苏轼临江仙课件大学语文完美版
- 《施工测量》课件
- 情绪健康管理服务规范
- 【环氧树脂复合材料研究进展文献综述6000字】
- 人行道混凝土专项施工方案
评论
0/150
提交评论