编译uboot流程
- cd u-boot //进入uboot工作目录
- make xxx_config //生成板卡配置
-
make xxx_config 干了些什么?
创建开发板相关的头文件的链接 //用来屏蔽代码里面的开发板目录差异
- 生成config.mk文件 //在makefile用到
- 在include/config 创建开发板相关的头文件
uboot启动流程
- romcode 进行一些基础的初始化
- 将u-boot区的前n个kb代码拷贝到sram运行
- 查看
arch/arm/cpu/u-boot.lds
链接脚本 分析到uboot会先进入_start
入口地址
第一阶段, 汇编阶段:
- 设置CPU进入管理模式
- 关闭看门狗
- 关中断
- 初始化时钟
- 关闭MMU
- 设置调用C函数的SP栈
- 重定位 (复制uboot,修改SDRAM上的链接地址)
- 清BSS段
- 调用C函数
start_armboot
第二阶段,C语言阶段:
- 初始化全局变量
- 运行init_sequence数组中的初始化函数
- 初始化堆内存
- 初始化外部存储设备
- 环境变量的重定位
- 获取IP地址和MAX地址
- 进入main_loop循环
参考文献: uboot与代码重定位 | uboot分析 | uboot的启动过程分析
uboot移植
参考文献: 移植uboot