1: Uboot的作用:
在系统刚上电的时候,系统需要运行一段程序去初始化硬件,设置软件运行环境,最后调用系统内核,这段程序就是Uboot
在了解uboot过程之前我们要搞清楚,整个系统可以运行起来,从软件上来看到底是有哪几部分组成?
1)bootloader:引导程序,即上电之后就运行的第一个程序
2)kernel:linux内核主要的功能有存储管理、CPU和进程管理,文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等
3)文件系统。包括根文件系统和建立在flash文件设备之上的文件系统,里面包含了系统能够所运行的应用程序,库等
4)应用程序
下面是linux系统中典型的区分结构
Bootloader的两个阶段
1:汇编阶段
硬件初始化
为第二阶段运行准备RAM空间
拷贝第二阶段的代码到RAM空间
设置好堆栈
跳转到C语言入口
2:C语言阶段
必要的硬件初始化
检测系统内核内存映射
将内核映像和根文件系统从flash内存中
设置好内核启动参数
调用内核
在Uboot中调用内核需要下列条件满足
1 寄存器设置
R0 = 0
R1 = 机器类型的ID。对于ARM 其机器类型的id可参考/linux/arch/arm/tools/match-types
R2 = 启动参数标记列表在arm中的起始地址
CPU工作模式
SVC模式
CPU必须禁止中断
catch和MMU的设置
MMU 必须关闭
指令catch可以打开可以关闭
数据catch必须关闭
如C语言可以如下调用内核
void (*theKernel)(int zero, int arch, u32 params_addr) = (void (*)(int, int, u32 ))KERNEL_RAM_BASE
the_Kernel(0, ARCH_NUMBER, (u32 )kernel_params_start)
Bootloader启动内核,参数传递