uboot启动流程分析5 - _main

  • _main
    uboot启动流程分析5 - _main_第1张图片
    76行,sp重新赋值为0X0091FF00
    83行,sp八字节对齐
    85行,sp赋值给r0
    86行,跳转到这个函数,r0作为参数传递
    • board_init_f_alloc_reserve
      uboot启动流程分析5 - _main_第2张图片
      预留早期malloc和gd区域,top的指向 top = top - 0X400 - 248 = 0X0091FA00
  • 87行,r0存放上边函数的返回值,赋值给sp,更新sp指针
    88行,r0赋值给r9,r9存放全局gd指针
    90行,调用board_init_f_init_reserve函数
    • board_init_f_init_reserve ---- common/init/board_init.c 用于初始化gd
  • 92行,r0清零
    93行,board_init_f 跳转到这个函数
    • common/board_f.c 初始化DDR,定时器,完成代码拷贝等
  • _main
    uboot启动流程分析5 - _main_第3张图片
    103行,设置sp = 0X9EF44E90
    109行,sp八字节对齐
    111行,r9 赋值为gd->bd
    112行,得到新的gd
    114行,lr寄存器为here
    115行,读取gd->reloc_off,赋值给r0
    116行,lr+r0赋值给lr
    120行, gd->relocaddr 赋值给r0 ,0X9FF47000
    121行,调用函数 relocate_code,
    127行,调用relocate_vectors
    131行,调用c_runtime_cpu_setup
  • _main
    uboot启动流程分析5 - _main_第4张图片
    141-159行,清除bss段
    167行,r0保存第一个参数
    168行,r1保存第二个参数
    171行,调用board_init_r

你可能感兴趣的:(嵌入式Linux-IMX6UL)