[RK3399][Android7.1] Uboot啟動過程小結
阿新 • • 發佈:2018-12-30
整個過程和rk3288平臺的uboot(v2014.10)載入流程類似,可參考
[RK3288][Android6.0] U-boot 啟動流程小結
blboard_init_f -> crt0_64.S //初始化環境安裝
board_init_f -> board_f.c
initcall_run_list -> //依次執行init_sequence_f陣列中的函式
setup_fdt //如果有的話,允許環境變數fdtcontroladdr地址中的dts覆蓋系統的那份
arch_cpu_init -> cpu.c
rkclk_set_pll //設定pll
rk_get_chiptype //獲取chip type,當前是CONFIG_RK3399
env_init env_rk.c //環境變數初始化, 使用那個env_rk.c的編譯由CONFIG_ENV_IS_IN_RK_STORAGE控制開啟
init_baud_rate//獲取預設波特率設定, 在rk3399_deconfig中已經定義了為1500000
serial_init //初始化當前使用的串列埠
print_cpuinfo //列印cpu以及版本還有clock資訊
show_board_info ->
checkboard rk33xx.c //列印board資訊
dram_init ->
get_ram_size //獲取ram size,程式碼中先固定CONFIG_SYS_SDRAM_SIZE為128M
reserve_lcd //預留lcd記憶體空間,其他模組預留的形式都是以reserve_xxx開頭的
setup_dram_config //ram配置資訊放到全域性變數中管理
show_dram_config //列印ddr資訊
bboard_init_r -> crt0_64.S //後期環境配置
board_init_r -> board_r.S
initcall_run_list -> //依次執行init_sequence_r陣列中的函式
board_init -> rk33xx.c //設定machine type以及boot params地址
initr_serial //選擇當前使用的串列埠終端
arch_early_init_r //中斷,dma初始化
initr_rk_storage ->
board_storage_init ->
StorageInit ->
memFunTab[memdev]->Init //根據當前flash type來選擇其中一個初始化, 支援sd,emmc. ums和nand的巨集在rk33plat.h中被undef.
SdhciInit sdhciBoot.c //讀取儲存資訊及大小
initr_env //環境變數初始化
board_late_init -> rk33xx.c
board_init_adjust_env //設定bootdelay,bootcmd這幾個環境變數
load_disk_partitions -> //載入eMMC中的分割槽資訊
GetParam ->
StorageReadLba ->
gpMemFun->ReadLba ->
SdhciBootReadLBA
ParseParam
rkimage_prepare_fdt //優先從boot分割槽去載入fdt,如果找不到,就從resource分割槽載入
key_init //按鍵初始化,包括rockusb, fastboot, recovery這幾個主要key的初始化
pmic_init -> power_rockchip.c //板子用的是rk808
pmic_rk808_init
pwm_regulator_init //初始化pwm相關的regulator,這裡用的是另一路pwm,用於控制DCDC,和backlight無關。
fg_init //fuel gauge初始化
board_fbt_preboot -> fastboot.c 即使不進入fastboot模式,有些變數也是需要配置的
fbt_fastboot_init //判斷當前device是否處於locked狀態
board_fbt_get_reboot_type //獲取當前reboot type, fastboot, rockusb, normal這些
board_fbt_low_power_check //低電量時處於充電狀態時要充電,否則直接關機
rockchip_display_init //display部分初始化
board_fbt_low_power_off //如果處於低電量而且沒在充電時,降低背光並且顯示警告logo,1S後關機
rockchip_show_logo -> //優先顯示uboot logo,沒有則顯示kernel logo。
load_bmp_logo
run_main_loop ->
main_loop ->
bootdelay_process //延時處理,並且獲取bootcmd引數用於後面開機進入kernel處理
autoboot_command ->
do_bootrk //進入kernel
[RK3288][Android6.0] U-boot 啟動流程小結
blboard_init_f -> crt0_64.S //初始化環境安裝
board_init_f -> board_f.c
initcall_run_list -> //依次執行init_sequence_f陣列中的函式
setup_fdt //如果有的話,允許環境變數fdtcontroladdr地址中的dts覆蓋系統的那份
arch_cpu_init -> cpu.c
rkclk_set_pll //設定pll
rk_get_chiptype //獲取chip type,當前是CONFIG_RK3399
env_init env_rk.c //環境變數初始化, 使用那個env_rk.c的編譯由CONFIG_ENV_IS_IN_RK_STORAGE控制開啟
init_baud_rate//獲取預設波特率設定, 在rk3399_deconfig中已經定義了為1500000
serial_init //初始化當前使用的串列埠
print_cpuinfo //列印cpu以及版本還有clock資訊
show_board_info ->
checkboard rk33xx.c //列印board資訊
dram_init ->
get_ram_size //獲取ram size,程式碼中先固定CONFIG_SYS_SDRAM_SIZE為128M
reserve_lcd //預留lcd記憶體空間,其他模組預留的形式都是以reserve_xxx開頭的
setup_dram_config //ram配置資訊放到全域性變數中管理
show_dram_config //列印ddr資訊
bboard_init_r -> crt0_64.S //後期環境配置
board_init_r -> board_r.S
initcall_run_list -> //依次執行init_sequence_r陣列中的函式
board_init -> rk33xx.c //設定machine type以及boot params地址
initr_serial //選擇當前使用的串列埠終端
arch_early_init_r //中斷,dma初始化
initr_rk_storage ->
board_storage_init ->
StorageInit ->
memFunTab[memdev]->Init //根據當前flash type來選擇其中一個初始化, 支援sd,emmc. ums和nand的巨集在rk33plat.h中被undef.
SdhciInit sdhciBoot.c //讀取儲存資訊及大小
initr_env //環境變數初始化
board_late_init -> rk33xx.c
board_init_adjust_env //設定bootdelay,bootcmd這幾個環境變數
load_disk_partitions -> //載入eMMC中的分割槽資訊
GetParam ->
StorageReadLba ->
gpMemFun->ReadLba ->
SdhciBootReadLBA
ParseParam
rkimage_prepare_fdt //優先從boot分割槽去載入fdt,如果找不到,就從resource分割槽載入
key_init //按鍵初始化,包括rockusb, fastboot, recovery這幾個主要key的初始化
pmic_init -> power_rockchip.c //板子用的是rk808
pmic_rk808_init
pwm_regulator_init //初始化pwm相關的regulator,這裡用的是另一路pwm,用於控制DCDC,和backlight無關。
fg_init //fuel gauge初始化
board_fbt_preboot -> fastboot.c 即使不進入fastboot模式,有些變數也是需要配置的
fbt_fastboot_init //判斷當前device是否處於locked狀態
board_fbt_get_reboot_type //獲取當前reboot type, fastboot, rockusb, normal這些
board_fbt_low_power_check //低電量時處於充電狀態時要充電,否則直接關機
rockchip_display_init //display部分初始化
board_fbt_low_power_off //如果處於低電量而且沒在充電時,降低背光並且顯示警告logo,1S後關機
rockchip_show_logo -> //優先顯示uboot logo,沒有則顯示kernel logo。
load_bmp_logo
run_main_loop ->
main_loop ->
bootdelay_process //延時處理,並且獲取bootcmd引數用於後面開機進入kernel處理
autoboot_command ->
do_bootrk //進入kernel