start.S解析11

来源:互联网 发布:网络拓扑visio图库 编辑:程序博客网 时间:2024/05/16 01:43

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org


第一次是DRAM,第二次是DDR中,

第三次设置栈,还是在DDR中,

这次设置栈是将栈放在合适的地方,

那什么是合适?紧凑而安全的地址,

我们实际将栈设置在uboot起始地址上方2MB处,

这里是满减栈,uboot大概是200k,而我们设置的栈地址是2MB,那么栈的大小大概是2MB-200k-0x1000,


清理bss,


ldr pc, _start_armboot

这个将要跳转的函数是uboot启动的第二阶段,

此处是远跳转,要说明的是,这里的地址,和当前地址无关,和链接加载地址有关,

从dram中跳转到了ddr中,


stack_setup:#if defined(CONFIG_MEMORY_UPPER_CODE)ldrsp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0x1000)#elseldrr0, _TEXT_BASE/* upper 128 KiB: relocated uboot   */subr0, r0, #CFG_MALLOC_LEN/* malloc area                      */subr0, r0, #CFG_GBL_DATA_SIZE /* bdinfo                        */#if defined(CONFIG_USE_IRQ)subr0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)#endifsubsp, r0, #12/* leave 3 words for abort-stack    */#endifclear_bss:ldrr0, _bss_start/* find start of bss segment        */ldrr1, _bss_end/* stop here                        */mov r2, #0x00000000/* clear                            */clbss_l:strr2, [r0]/* clear loop...                    */addr0, r0, #4cmpr0, r1bleclbss_lldrpc, _start_armboot_start_armboot:.word start_armboot


0 0
原创粉丝点击