imx6q u-boot函数执行流程分析

 

BSP: L_4.1.5_1.2.0_GA

 

关于u-boot(2015.04)的函数执行流程分析:

make xxx_defconfig时会指定u-boot相关的配置文件,配置文件的指定流程是通过Makefile实现的,就不具体分析了。

下面分析u-boot的函数调用流程:

首先会执行/arch/arm/cpu/armv7/中的start.S,分析此文件

其中有一句:

bl    _main

会调用/arch/arm/lib/ctr0.S,分析此文件发现:

       bl    board_init_f

       ldr   pc, =board_init_r

board_init_fboard_init_r都是C语言的函数,他们分别位于:

/common/board_f.c/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_initboard_late_initboard_early_init_f都是在板级初始化文件中定义的(/board/freescale/mx6sabresd/mx6sabresd.c),用户自定义的初始化代码,均可以放在这三个初始化函数中,需要注意的是在mx6sabresd.c中有一个初始化函数为 board_init_f(),此函数是不会被执行的,千万要注意!仅有上述的三个初始化函数会被u-boot调用!!!


你可能感兴趣的:(imx6q u-boot函数执行流程分析)