回味经典——uboot1.1.6 之 第一阶段_漫不经心-CSDN博客
u-boot-2012.04.1 第一阶段分析 内存划分 代码重定位_漫不经心-CSDN博客
回味经典——uboot1.1.6 之 第二阶段 第三阶段_漫不经心-CSDN博客
自己写一下,加深印象
uboot的目的只有一个,就是加载运行内核。为了加载内核,uboot有三个阶段事情要完成。
uboot第一阶段:
配置单板的运行环境。如时钟设置、关看门狗、初始化sdram、代码重定位、内存划分。内存划分把sdram进行合理划分。CPU最终跳转到 sdram 里的 start_armboot() 函数
uboot第二阶段:
单板外设的初始化,如uart串口、网卡、norflash、nandflash等,使得单板在进入内核之前能够胜任各种工作,比如网口烧写、串口测试等。同时做一些第三阶段的准备,如向 gd 结构体中记录了 机器ID 以及 tag 的存放地址,这俩都是要传递给内核的。
第二阶段代码最终跳转到 main_loop 里的uboot菜单,接收串口传递进来的各种命令。
uboot第三阶段:
第三阶段主要的工作就是设置 uboot 将要传递给内核的 tag 以及解析 uboot 头部里包含的信息,最终跳转到内核起始地址去执行,将主控权交给内核。第三阶段之后uboot就自动结束。