Bootloader

比Bootloader从字面上来看就是启动加载的意思。用过电脑的都知道,windows开机时会首先加载bios,然后是系统内核,最后启动完毕。那么bootloader就相当于手机的bios,它在手机启动的时候根据基带初始化硬件,然后引导系统内核,直到系统启动。

Bootloader是嵌入式系统在加电后执行的第一段代码,通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态。在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行 。

对于嵌入式系统,Bootloader是基于特定硬件平台来实现的。因此,几乎不可能为所有的嵌入式系统建立一个通用的Bootloader,不同的处理器架构都有不同的Bootloader。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序 。

反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种体系结构的嵌入式系统。例如,U-Boot就同时支持PowerPC、ARM、MIPS和X86等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。

uboot

1 硬件管理

uboot要能够进行Soc级(Soc内部外设)和板级(Soc外部外设)硬件管理。

uboot中实现了一部分硬件的控制能力(uboot中初始化了一部分硬件),因为uboot为了完成一些任务必须让这些硬件工作。譬如uboot要实现刷机必须能驱动iNand,譬如uboot要在刷机时LCD上显示进度条就必须能驱动LCD,譬如uboot能够通过串口提供操作界面就必须驱动串口。譬如uboot要实现网络功能就必须驱动网卡芯片。

2 能够完成镜像烧录(刷机)

uboot要能够被借助完成刷机操作。参考下SD卡刷机的步骤:

  • 烧录uboot到SD卡中,有2种烧写方法:一种是在windows中用刷卡工具去制作启动SD卡;另一种是在linux中用dd命令。制作完SD后将SD卡插入开发板,然后开机就可以进入uboot界面。

  • 使用uboot的fastboot命令,并借助PC中的fastboot软件完成包括uboot、kernel、rootfs等的镜像的烧录。

从上面就可以看出,刷机依靠的是uboot的fastboot命令,将镜像写到相应的FLASH中。

3 uboot的“生命周期”

uboot的入口就是开机自动启动,uboot的唯一出口就是启动内核。uboot还可以执行很多别的任务(譬如烧录系统),但是其他任务执行完后都可以回到uboot的命令行继续执行uboot命令,而启动内核命令一旦执行就回不来了。

4 uboot要提供命令式shell界面

shell是用户操作接口的意思。shell有命令行的shell,如windows下的cmd,如linux下的终端;也有GUI式的shell,比如常用的windows下的各种界面。shell是一种封装后留出来的接口,uboot也要有这样的一个接口。

shell的原理是:由消息接收、解析、执行构成的一个死循环。我之前用过3D打印机的固件(firmware)也是这样的模式。

uboot的shell使用的也是行缓冲的模式。也就是以回车键(换行键)作为一个命令输入的结束。对应的其他缓冲模式还有无缓冲和全缓冲:无缓冲就是输入一个字符就当做一个命令处理;全缓冲就是无论输入什么都缓冲起来知道缓冲区满了才做一次处理。

bootloader 与 uboot的区别

BootLoader是嵌入式设备中用来启动操作系统内核的一段程序。

uboot(universal bootloader)是一种可以用于多种嵌入式CPU的BootLoader程序,换言之,uboot是bootloader的一个子集。

uboot的核心作用就是启动操作系统内核,uboot的本质就是一段裸机程序。

u-boot与bootloader及其区别相关推荐

  1. uboot和bootloader的区别

    目录 1.bootLoader 2.uboot 3.uboot和bootLoader的关系 3.1uboot和bootloader的联系 3.2bootloader 与 uboot的区别 4.拓展 1 ...

  2. 硬件知识:u-boot和bootloader的区别

    嵌入式软件工程师听说过 u-boot 和 bootloader,但很多工程师依然不知道他们到底是啥. 今天就来简单讲讲 u-boot 和 bootloader 的内容以及区别. Bootloader ...

  3. 关于boot及bootloader

    bootloader,比如windows启动的时候可以通过按F2或者F10进入启动菜单,设置一些系统级别的参数,比如最常改动的启动顺序,可以选择CDROM启动.USB启动等. 在基于ARM核的嵌入式系 ...

  4. BIOS和Bootloader的区别

    BIOS和Bootloader它们都是有基本的初始化系统,USB下载和硬件测试等功能的系统启动程序.不同之处在于中断矢量的定位,由于 bootloader要启动uClinux,因此必须按照uClinu ...

  5. 启动代码和Bootloader的区别和关系介绍

    注意:很多初学者总是将启动代码和Bootloader联系在一起,这是错误的 什么是启动代码?     启动代码是系统上电或者复位后运行的第一段代码,是进入C 语言的main 函数之前需要执行的那段汇编 ...

  6. spring boot 和spring mvc区别

    spring boot 和spring mvc 其实并没有对比性. 我最开始接触的是spring mvc ,最近刚刚接触了spring boot ,脑子里面便产生了这个问题. spring boot ...

  7. Spring Boot 与 MVC 的区别,这些终于搞明白了!

    作者:潜龙勿用 Spring 框架就像一个家族,有众多衍生产品例如 boot.security.jpa等等.但他们的基础都是Spring 的 ioc和 aop ioc 提供了依赖注入的容器 aop , ...

  8. Java--SSH,SSM和Spring Boot框架区别优缺点

    一.SSH(Struts + Spring + Hibernate) 1.基本概念 SSH框架是JAVA EE中三种框架所集成,分别是Struts,Spring,Hibernate框架所组成 集成SS ...

  9. BootLoader这个玩意

    前面我们完整的学习了UBoot,这里最后来从宏观上看看再看看BootLoader这个玩意. 内容来自<深入理解BootLoader> 什么是BootLoader? BootLoader就是 ...

最新文章

  1. vs.net 2003 错误:无法生成项目输出组“内容文件来自stuschool(活动)”
  2. Python利用描述符进行属性访问控制,完成属性数据类型强制定义(如C语言)、属性读写及删除操作
  3. Python学习笔记——for循环和range函数
  4. OpenShift 4 - Istio-Tutorial (2) 部署三个微服务
  5. 珍藏40个android应用源码分享
  6. 数模论文研读--------09年B题:眼科病床
  7. 区块链“国家队”上新,天津重磅发布自主可控区块链系统“海河智链”
  8. 阿里云图数据库GDB公测,高度连接数据查询效率提升10倍
  9. 前端怎么自我介绍_实习|猫眼前端面试经历,问问题很关键(已拿offer)
  10. jsp+servlet+mysql的简单使用
  11. Github 插件之 Octotree 报错介绍与解决
  12. R74800H和i79750h参数对比哪个好?
  13. Synergy让一个鼠标一个键盘操作多台电脑
  14. 模拟扑克牌花色:♠ ♥ ♦ ♣ * 牌号:A 2 3 4 5 6 7 8 9 10 J Q K * 大王、小王 * * 1.生成一副牌 * 2.然后发牌
  15. vr全景三维产品交互展示设计
  16. FRW辐轮王全球十大顶级运动户外品牌第一自行车受邀中国进博会
  17. linux设置sfq队列参数,Linux内核中流量控制(5)
  18. 谁再瞧不起搬砖的我。。
  19. 微信小程序--注册、接入流程
  20. 关于单片机对三极管B值的测量

热门文章

  1. 理解浏览器是如何加载及渲染网页的
  2. jQuery 鼠标滚轮插件应用 mousewheel
  3. winform Outlookbar
  4. Windows Phone 7实现图片数据绑定
  5. OOB与COM交互读写本地文件
  6. linux基础知识点总结-最实用!(环境搭建,系统分区,常用命令,vim文本)
  7. Fragment Or DialogFragment Can not perform this action after onSaveInstanceState
  8. 数组元素的地址计算问题(一维到高维)
  9. 学成在线--13.RabbitMQ工作模式
  10. python代码比例_Python如何输出百分比