良许Linux教程网 干货合集 u-boot和bootloader的区别有哪些?

u-boot和bootloader的区别有哪些?

嵌入式软件工程师可能听说过u-boot和bootloader,但仍有许多工程师不清楚它们的具体含义。

在这里,我们将简单介绍u-boot和bootloader的内容以及它们之间的区别。

Bootloader

从字面意思上来看,bootloader可以理解为启动加载程序。在使用电脑的过程中,我们知道开机时会首先加载bios,然后加载系统内核,最后完成系统启动。类似地,bootloader在手机启动时根据基带芯片初始化硬件,并引导系统内核,直到系统完全启动。

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

对于嵌入式系统而言,bootloader是基于特定的硬件平台来实现的。几乎不可能为所有嵌入式系统建立一个通用的bootloader,因为不同的处理器架构有不同的bootloader。bootloader不仅依赖于CPU的体系结构,还依赖于嵌入式系统板级设备的配置。即使对于两块使用相同处理器的不同嵌入式板,要让在一块板上运行的bootloader也能在另一块板上运行,通常需要修改bootloader的源代码。

然而,大部分bootloader仍然存在许多共性,某些bootloader也支持多种体系结构的嵌入式系统。举例来说,U-Boot支持PowerPC、ARM、MIPS和X86等多种体系结构,并且支持上百种不同的开发板。通常情况下,bootloader能够自动从存储介质启动,并引导操作系统启动,同时大部分bootloader还支持串口和以太网接口。

uboot

1.硬件管理

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

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

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

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

a.烧录uboot到SD卡中。

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

b.使用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的本质就是一段裸机程序。

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部