目录
1. 从汇编到C语言
1. 从汇编到C语言
uboot整个程序的入口是 ./arch/arm/lib/vectors.S 的 start
其中,reset 来自于 ./arch/arm/cpu/armv7/start.S,
./arch/arm/cpu/armv7/start.S 程序的执行路径为 reset --> save_boot_params_ret --> cpu_init_crit。 cpu_init_crit则调用了 lowlevel_init.
lowlevel_init 来自于 ./arch/arm/cpu/armv7/lowlevel_init.S
其中,s_init 来自于 ./arch/arm/mach-imx/mx6/soc.c,
当执行完 s_init 后,程序流会回退到 ./arch/arm/cpu/armv7/start.S,执行 main。
main 的定义位于 ./arch/arm/lib/crt0.S
在main函数里,将会依次调用 :
board_init_f ( common/board_f.c ) init_sequence_f[] // 就是那个函数指针数组,包含
// 初始化串口的功能
relocate_code ( arch/arm/lib/relocate.S )
relocate_vectors ( arch/arm/lib/relocate.S )
board_init_r ( common/board_r.c )
总结一下,uboot启动后,程序流的执行路径: