Bootloader 之U-boot启动流程

一、U-boot的存储位置
  U-boot 一般是放在硬件“本地”(电路板)的Flash内,也有可能放在SD卡上,但是肯定不会放在内存或网络上。

二、U-boot的意义
  U-boot是嵌入式Linux操作系统中运行的第一个程序(可将U-boot和内核看做是两个不同的程序),其终极目的是引导加载内核进而使Linux操作系统运行起来,。如果U-boot出现问题 ,操作系统就无法启动,所以对于U-boot而言,其稳定性是第一位,运行速度是排在第二位的。

三、U-boot的启动流程
1、汇编阶段
A、初始化关键硬件:关闭看门狗、中断、MMU和Cache(缓存)等,开启时钟、串口、Flash和内存等。
  目的:为了U-boot稳定性,关掉不必要或影响稳定性的硬件,打开运行U-boot必须的硬件。即通过使U-boot运行单纯化,从而保证U-boot的稳定性。
B、U-boot自搬移:U-boot自己将自己从Flash搬移到内存(RAM)运行。
  目的:提高U-boot的运行速度。因为内存要比Flash速度快。
2、C语言阶段:
A、初始化大部分硬件;
B、将Linux内核(Kernel)从Flash中“搬移”到内存中运行;
C、运行内核(Kernel)。
在这里插入图片描述

四、U-boot启动之“汇编阶段”和“C语言阶段”
1、U-boot启动中“汇编阶段”的必要性:
A、U-boot初始化硬件阶段,要操作ARM体系架构下的特殊功能寄存器,而特殊功能寄存器必有由汇编语言访问,C语言无法访问。
B、如果使用C语言,在进入U-boot C程序的main函数之前需要提前把“栈”设置好,否者“栈”默认是0,无法运行C语言。所以U-boot启动先要使用汇编语言,把“栈”设置好,然后使用C语言。
2、U-boot启动中“C语言阶段”的重要性:
  U-boot启动运行过程能不能全用汇编语言写呢?原则上是可以的,但是汇编语言晦涩难懂、逻辑算法表达单一而且不易移植,所以在U-boot的启动代码中,能用C语言写就用C语言,C语言写不了的用汇编语言写(汇编语言代码占U-boot 总代码的10%左右。)。

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值