BSP: L_4.1.5_1.2.0_GA
关于u-boot(2015.04)的函数执行流程分析:
在make xxx_defconfig时会指定u-boot相关的配置文件,配置文件的指定流程是通过Makefile实现的,就不具体分析了。
下面分析u-boot的函数调用流程:
首先会执行<u-boot>/arch/arm/cpu/armv7/中的start.S,分析此文件
其中有一句:
bl _main
会调用<u-boot>/arch/arm/lib/ctr0.S,分析此文件发现:
bl board_init_f
ldr pc, =board_init_r
board_init_f和board_init_r都是C语言的函数,他们分别位于:
<u-boot>/common/board_f.c和<u-boot>/common/board_r.c
u-boot就是通过这两个函数去一步步初始话一个板子的。
继续分析board_init_f()函数,其通过调用initcall_run_list(init_sequence_f),将函数指针数组init_sequence_f中的函数一一执行,而init_sequence_f[]中的board_early_init_f。
在执行完board_init_f ()后会执行board_init_r ()函数,与board_init_f类似,board_init_r也会通过调用initcall_run_list(init_sequence_r),将init_sequence_r[]中的函数一一执行,并最终调用run_main_loop,剩下的执行流程就不做分析了(大家都能看懂),需要注意的是函数board_init和board_late_init与board_early_init_f都是在板级初始化文件中定义的(<u-boot>/board/freescale/mx6sabresd/mx6sabresd.c),用户自定义的初始化代码,均可以放在这三个初始化函数中,需要注意的是在mx6sabresd.c中有一个初始化函数为 board_init_f(),此函数是不会被执行的,千万要注意!仅有上述的三个初始化函数会被u-boot调用!!!