rpi uboot 2016的关键跳转点

来源:互联网 发布:园林设计效果图软件 编辑:程序博客网 时间:2024/06/17 14:10

VERSION = 2016
PATCHLEVEL = 11
SUBLEVEL =
EXTRAVERSION = -rc1
NAME =


1最开始的启动部分第一句代码从start.S移动到了vector.S。

arm/lib/vector.S line 48

_start:

b reset

直接跳到了cpu/arm1176/start.S

顺序执行到line 103

bl lowlevel_init

bl _main

其中lowlevel_init在arm/mach-bcm283x/lowlevel_init.S里面什么都没做。直接return

执行bl _main

_main 在arm/lib/crt0.S的line 67

执行到line 93 bl board_init_f

该函数在 common/board.c

主要是依次运行 init_sequence_f里面的函数,执行失败直接hang。rpi这个阶段执行的最后一个函数是setup_reloc

返回crt0.S中,执行到 line 121 b relocate_code 开始代码拷贝到ram

relocate_code 的代码在arm/lib/relocate.S

再执行完拷贝以后relocate.S的line 127 bx lr 直接跳转到拷贝后的代码的

crt0.S的127行。

bl relocate_vectors

从这一句开始。代码就在新的位置上执行了。

所以带符号调试uboot的时候。需要在relocate.S的line 127 bx lr 下一个断点

然后gbd执行添加符号到重定位的地址

symbol-file

add-symbol-file u-boot relocateaddr

继续crt0.S向下执行到 ldrpc, =board_init_r

跳转到common/board_r.c的board_init_r


board_init_r的执行基本和board_init_f的类似。同样是调用一个init_sequence_r数组内的函数。

一旦失败hang


依次执行init_sequence_r里面的函数。

如果默认没有进行过任何配置。最后执行到

run_main_loop。不再返回。




0 0
原创粉丝点击