Platform: RK3288
OS: Android 6.0
Version: v2014.10
bl board_init_f -> crt0.S
initcall_run_list(init_sequence_f) -> board_f.c
arch_cpu_init ->
rk_get_chiptype //获取chip type (rk31xx, rk32xx等)
timer_init
env_init
init_baud_rate
serial_init
print_cpuinfo //dump cpu/pll info
dram_init //获取size以及end address
setup_dram_config ->
dram_init_banksize
show_dram_config
ldr pc, =board_init_r -> crt0.S
board_init_r -> board_r.c
init_sequence_r //调用init_sequence_r中的各个函数。
board_init rk32xx.c //设置machine type以及boot param起始地址,kernel要用到。
initr_serial -> board_r.c //初始化串口。
serial_initialize
initr_rk_storage -> //初始化storage
board_storage_init -> rk32xx.c
StorageInit -> storage.c //初始化eMMC.
memFunTab[memdev]->Init //调用emmcFunOp的SdmmcInit()
SdmmcInit sdmmcBoot.c 这里还会根据sd里存的信息来区分是要boot还是update.
StorageReadFlashInfo ->
gpMemFun->ReadInfo ->
SdmmcReadFlashInfo sdmmcBoot.c
&
OS: Android 6.0
Version: v2014.10
bl board_init_f -> crt0.S
initcall_run_list(init_sequence_f) -> board_f.c
arch_cpu_init ->
rk_get_chiptype //获取chip type (rk31xx, rk32xx等)
timer_init
env_init
init_baud_rate
serial_init
print_cpuinfo //dump cpu/pll info
dram_init //获取size以及end address
setup_dram_config ->
dram_init_banksize
show_dram_config
ldr pc, =board_init_r -> crt0.S
board_init_r -> board_r.c
init_sequence_r //调用init_sequence_r中的各个函数。
board_init rk32xx.c //设置machine type以及boot param起始地址,kernel要用到。
initr_serial -> board_r.c //初始化串口。
serial_initialize
initr_rk_storage -> //初始化storage
board_storage_init -> rk32xx.c
StorageInit -> storage.c //初始化eMMC.
memFunTab[memdev]->Init //调用emmcFunOp的SdmmcInit()
SdmmcInit sdmmcBoot.c 这里还会根据sd里存的信息来区分是要boot还是update.
StorageReadFlashInfo ->
gpMemFun->ReadInfo ->
SdmmcReadFlashInfo sdmmcBoot.c
&

本文详细介绍了基于RK3288平台、Android 6.0系统的U-boot启动流程,从board_init_f开始,经过环境变量初始化、存储设备初始化、kernel加载等步骤,最终进入main_loop启动kernel。
最低0.47元/天 解锁文章
660

被折叠的 条评论
为什么被折叠?



