RK3399 uboot启动

OS: Android 7.1
Board: Firefly-RK3399

Uboot: v2017.02


整个过程和rk3288平台的uboot(v2014.10)加载流程类似,可参考
[RK3288][Android6.0] U-boot 启动流程小结

bl board_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信息
b board_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
————————————————
版权声明:本文为CSDN博主「KrisFei」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/kris_fei/article/details/78970187

你可能感兴趣的:(uboot启动)