UBOOT启动流程详解

第一阶段(汇编语言阶段)

1.设置异常向量表,当系统发生异常时总会接入到一个固定地址。

2.硬件初始化。配置时钟相关参数,比如分频系数等等(内核时钟,总线时钟,IO接口时钟)

3.关闭看门狗。看门狗用于防止程序跑飞,但是在 uboot启动阶段,还没有加载 操作系统,只有在 加载操作系统后,如果没有喂狗的过程的话,就会判定程序已经跑飞,需要重启系统。

4.关闭MMU,MMU是用于虚拟地址向物理地址进行映射的一个结构。在 uboot阶段操作的就直接是 物理地址,所以不需要转换。

5.关闭中断。uboot引导linux起到的过程中本身就是一个完成的过程,不需要中断机制。

5.启动ICACHE(指令),关闭DCACHE(数据)。启动指令CACHE课可以加快指令读取的速度,但是数据CACHE 必须 要关闭,因为它本身是一个CPU的二级缓存,在运行程序的时候可能会往里面去取数据,但是此时ram里面的数据可能并没有存入到里面,这就可能导致读取到错误的数据。

 6.为第二阶段的代码准备ram空间。准备ram空间主要就是使内存芯片可用。

 7.复制uboot第二阶段的代码至ram中。

8.设置pc指针指向start_armboot函数,为第二阶段代码的入口(同时需要清除BSS段)。

第二阶段

1.初始化外设。最少需要一个串口与用户进行交互。

2.检测内存映射。主要是检测已经使用了的内存空间。

3.将内核以及根文件系统从flash读取到SDRAM上。

4.为内核设置启动参数

其中主要涉及:

参数传递:

R0=0,

R1=机器ID。每一款芯片都有自己的名字,以便以操作系统适应与该开发板。

R2=启动参数标记列表在RAM中起始基地址,uboot启动之后,整个程序也就结束了,所以它只能够将要传递给内核的参数放到一个固定的地方,然后让linux内核自己去读取,这个信息的集合也就是标记列表。

三,重要参数bootcmd以及booargs

1.bootcmd,保存了uboot的默认命令,uboot倒计时结束后就会执行此命令。(比如读取emmc或者nand中的kenel文件和设备树dtb到内存中)

2.bootargs,保存着uboot传递给内核的参数。console 用于设置 终端,也就是通过什么方式进行交互。roo 用于指向根文件存放的位置。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值