Uboot启动流程

来源:互联网 发布:多元高斯分布 知乎 编辑:程序博客网 时间:2024/05/17 01:34

Uboot(Universal Boot Loader)是bootloader中的一种,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
其实bootloader并不是必须的,如果我们的硬件有足够大的norflash,并且实现了XIP(本地执行)技术,那么WinCE 操作系统可以直接在norflash里面运行起来,不需要将它复制到RAM中去,那么bootloader就失去了作用。
总的来讲uboot所完成的工作主要有一下内容:
 对硬件设备的初始化,为内核运行创造必要的条件
 将uboot、内核、文件系统拷贝到Nand Flash中(当然有其他的方式,这里只举一种)。
 将uboot中获取到的相关CPU信息,板子信息,存储信息等通过参数传递给内核。
 Uboot阶段还会根据实际需要添加LCD输出,LOGO输出,SD卡驱动,USB驱动等。
(一)启动流程
Uboot整个启动流程如下图所示:
这里写图片描述
1.1 汇编部分
1.1.1 start.s
(以S3C6410为例位置在:uboot1.1.6/cpu/s3c64xx)
1.1.1.1设置中断向量
这里写图片描述
1.1.1.2 CPU的初始化
这里写图片描述
1.1.1.4 跳转到对板子相关信息的初始化
在start.s中通过跳转到lowlevel_init(以S3C6410为例位置在:uboot1.1.6/board/samsung/smdk6410 文件lowlevel_init.S)(该函数与具体的平台相关)把nandflash中的代码读到SDRAM
这里写图片描述
在start.S文件中还有一部份代码决定了,uboot的启动方式。在后来的学习中,下面的代码与制作uboot SD卡启动相关,下面代码决定了如何将SD卡中4K之后的内容移入SDRAM之中
1.1.1.5 不同的启动方式
这里写图片描述
1.1.1.6 跳转到start_armboot
这里写图片描述
1.2 start_armboot函数分析
在(uboot/lib_arm/board.c)中
start_armboot会马上申请三块空间,一块用来分配给malloc管理,一份用来存储gd_t,一份用来存储bd_t。
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

0 0