编译uboot流程

  1. cd u-boot //进入uboot工作目录
  2. make xxx_config //生成板卡配置
  3. make //根据板卡配置编译uboot

    make xxx_config 干了些什么?

  4. 创建开发板相关的头文件的链接 //用来屏蔽代码里面的开发板目录差异

  5. 生成config.mk文件 //在makefile用到
  6. 在include/config 创建开发板相关的头文件

uboot启动流程

  1. romcode 进行一些基础的初始化
  2. 将u-boot区的前n个kb代码拷贝到sram运行
  3. 查看 arch/arm/cpu/u-boot.lds链接脚本 分析到uboot会先进入_start 入口地址

第一阶段, 汇编阶段:

  1. 设置CPU进入管理模式
  2. 关闭看门狗
  3. 关中断
  4. 初始化时钟
  5. 关闭MMU
  6. 设置调用C函数的SP栈
  7. 重定位 (复制uboot,修改SDRAM上的链接地址)
  8. 清BSS段
  9. 调用C函数start_armboot

第二阶段,C语言阶段:

  1. 初始化全局变量
  2. 运行init_sequence数组中的初始化函数
  3. 初始化堆内存
  4. 初始化外部存储设备
  5. 环境变量的重定位
  6. 获取IP地址和MAX地址
  7. 进入main_loop循环

uboot分析 - 图1
参考文献: uboot与代码重定位 | uboot分析 | uboot的启动过程分析

uboot移植

参考文献: 移植uboot