uboot搬移部分和重定位部分的代码分析
发布时间:2020-12-15 18:29:49 所属栏目:百科 来源:网络整理
导读:来看一下搬移部分和重定位部分的代码: relocate: /* 把 U-BOOT 重新定位到 RAM*/ ???????? //r0=0; adr r0,_start /* r0 是代码的当前位置 */ ldr r1,_TEXT_BASE /* 测试判断是从 FLASH 启动,还是 RAM? */ //r1=TEXT_BASE = 0x33F80000 cmp???? r0,r1????
来看一下搬移部分和重定位部分的代码: relocate: /* 把U-BOOT重新定位到RAM*/ //如果当前的位置就是0x33F80000,既然uboot能够正常执行,起始地址肯定是0x33F80000,所以如果起始地址等于0x33F80000,那肯定现在是从norflash中启动的。 beq???? stack_setup? /*如果R0等于R1,跳到重定位代码。*/ //如果不是从RAM运行的话,则将代码拷贝到_TEXT_BASE标识的RAM中。 /*准备重新定义代码。*/ ldr r2,_armboot_start//_armboot_start=_start ldr r3,_bss_start? // sub r2,r3,r2 /* r2得到armboot的大小*/ add r2,r0,r2 /* r2得到要复制代码的末尾地址*/ //kaobei guo cheng copy_loop:/*重新定位代码*/ ldmia r0!,{r3-r10} /*从源地址[r0]复制,r0指向_start(=0)*/ stmia r1!,{r3-r10} /*复制到目的地址[r1],r1指向_TEXT_BASE(=0x33F80000)*/ cmp r0,r2 /* 复制数据块直到源数据末尾地址[r2]*/ ble copy_loop (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |