参考资料:
Uboot启动分析笔记-----Stage1(start.S与lowlevel_init.S详解):https://www.cnblogs.com/80scd/p/5872373.html
比较详细的jz2440移植:https://blog.csdn.net/lizuobin2/article/details/52054293 推荐
uoot star.s分析: http://blog.chinaunix.net/uid-22891435-id-380150.html
时钟图解析:https://blog.csdn.net/czg13548930186/article/details/75425759
1 引导模式 : 引导启动内核
2 下载模式 : 负责下载程序到开发板
来源:https://blog.csdn.net/ccccdddxxx/article/details/6800135
1、版本号变化:
2008年8月及以前
按版本号命名:u-boot-1.3.4.tar.bz2(2008年8月更新)
2008年8月以后均按日期命名。
例如:u-boot-2011.06.tar.bz2(2011年6月更新)
标红的部分一般为移植过程的目录文件
2008年以前的uboot
├── api 存放uboot提供的接口函数
├── board 根据不同开发板定制的代码,代码也不少
├── common 通用的代码,涵盖各个方面,已命令行处理为主
├── cpu 与体系结构相关的代码,uboot的重头戏
├── disk 磁盘分区相关代码
├── doc 文档,一堆README开头的文件
├── drivers 驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples 示例程序
├── fs 文件系统,支持嵌入式开发板常见的文件系统
├── include 头文件,已通用的头文件为主
├── lib_【arch】 与体系结构相关的通用库文件
├── nand_spl NAND存储器相关代码
├── net 网络相关代码,小型的协议栈
├── onenand_ipl
├── post 加电自检程序
└── tools 辅助程序,用于编译和检查uboot目标文件
1、从u-boot-2010.06版本开始把体系结构相关的内容合并,原先的cpu与lib_arch内容全部纳入arch中,并且其中增加inlcude文件夹;分离出通用库文件lib。
2、移植工作最主要的是看对应的处理器和开发板代码,2010.06版本以后处理器相关的代码集中在arch、board目录。(以前版本主要在cpu和board目录)
u-boot-2010.06及以后版本
├── api 存放uboot提供的接口函数
├── arch 与体系结构相关的代码,uboot的重头戏
├── board 根据不同开发板定制的代码,代码也不少
├── common 通用的代码,涵盖各个方面,已命令行处理为主
├── disk 磁盘分区相关代码
├── doc 文档,一堆README开头的文件
├── drivers 驱动,很丰富,每种类型的设备驱动占用一个子目录
├── examples 示例程序
├── fs 文件系统,支持嵌入式开发板常见的文件系统
├── include 头文件,已通用的头文件为主
├── lib 通用库文件
├── nand_spl NAND存储器相关代码
├── net 网络相关代码,小型的协议栈
├── onenand_ipl
├── post 加电自检程序
└── tools 辅助程序,用于编译和检查uboot目标文件
先看一下arch目录:
arch
├── arm
├── avr32
├── blackfin
├── i386
├── m68k
├── microblaze
├── mips
├── nios2
├── powerpc
├── sh
└── sparc
arch/arm
├── cpu //把cpu合并到此处
├── include
└── lib
start.s分析:https://blog.csdn.net/shenlong1356/article/details/87914380
uboot.lds分析 : https://blog.csdn.net/shenlong1356/article/details/87911595
从uboot.lds分析: 可以看出uboot从start.s文件的start开始执行
reset //完成芯片相关初始化:进入SVC模式,关闭看门狗,关闭中断,设置时钟频率 ,
↓
cpu_init_crit ---> lowlevel_init () //清楚I/D Cache , 禁止MMU和CACHE, 配置memory control
↓
relocate //重定位:如果代码不在指定的地址上需要把uboot从当前位置copy到RAM指定位置上
↓
stack_setup //建立堆栈,为进入C函数做准备 清0 .bss段
↓
start_armboot() //第二阶段启动,第一个c函数
↓
init_sequence[] //
↓
getenv()
↓
main_loop()