0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

嵌入式系统里的Boot Loader技术详解

开源嵌入式 来源:搜狐网 作者:搜狐网 2020-09-27 18:08 次阅读

嵌入式系统当中你可能经常听到 boot loader(引导加载器)这一词,boot loader是指什么呢?在我们日常经常接触的东西中是不是有与boot loader的作用或是概念相似的呢?如果你稍微熟悉计算机的组成,你一定知道BIOS(Basic Input/Output System)。BIOS在计算机中就是用来启动计算系统的,在完成一定的硬件初始化工作以及人机交互后,它加载位于硬盘中的操作系统,并最终运行操作系统。嵌入式系统中的boot loader与BIOS的作用就是相类似的,也是完成对于处理器相关的硬件资源进行初始化后,最后加载通常是存放在FLASH中的应用程序,当然在嵌入式系统当中操作系统与应用程序一般是在同一个可执行文件中的,这与我们的电脑有很大的不同。
BIOS与boot loader有相同之处,比如:
1)完成处理器正常最小系统的初始化。最小系统的概念通过举个例比较容易让人明白,比如对于我们的计算机,通常在初始化时不需要用到以太网,因此,在最小化系统中就不包括以太网卡的初始化,对其的初始化完全可以放到操作系统中去做,而不是在BIOS中。相类似的是,在嵌入式系统中,我们通常不需要在初始化的过程中用到USB设备,那么对于USB设备的初始化就不需要包含在最小系统中,而可以在被boot loader加载的应用程序中去初始化它。

2)两者在最后都得加载其它的程序,并将运行权交给被加载的程序。对于BIOS,其所加载的程序通常是操作系统,当然,如果你正在安装系统那么BIOS所加载的可能是位于光盘中安装程序。对于loader,其加载的是一个可执行程序,这一可执行程序包括实时操作系统(有的也不是实时操作系统)和我们的应用程序。

3)如果BIOS或是boot loader程序太大,通常都会采用压缩技术对其进行压缩。对于BIOS,其肯定会采用压缩技术进行压缩,因为BIOS随着计算机行业的飞速发展而越来越复杂,比如,以前的BIOS不需要支持USB的鼠标和键盘,但现在就得支持了,这就意味着BIOS要有USB鼠标和键盘的驱动程序。另一方面计算机的出货量大,所以BIOS芯片(其实就是一块FLASH芯片)的容量也就会尽可能的控制得小以提高利润,比如可能控制其容量在512K字节。同BIOS相类似的是,如果我们的嵌入式系统中的FLASH紧张时,为了节省FLASH空间,我们也得对boot loader采用压缩技术。可能有人要问,BIOS也好,boot loader也好,如果采用了压缩技术对其压缩,那是谁负责在运行它们时对其解压缩呢?答案是它们自己,很有趣吧!其实,我们说对它们采用压缩技术并不是对于全部的程序(或数据)都采用压缩技术。在它们当中,一定存在一部分不压缩的部分,这保证处理器启动时,能直接运行这部分的代码。技巧在于,没有压缩的代码当中包括了解压程序(从C程序角度来看是几个函数),其将被压缩了的部分解压到内存中。当然,其中的程序处理很有技巧性,要保证程序在运行的过程中,对于压缩部分代码的运行是透明的,这在具体的代码分析中我们再来看。
BIOS与boot loader除了相同之处外,还有不同之处,它们是:

1)BIOS往往比boot loader复杂很多,因为我们的计算机硬件环境比嵌入式系统复杂得多。在计算机行业,为了保证操作系统在设计时尽可能运行在不同的主板上,这需要BIOS的帮助以屏蔽一些硬件信息。操作系统对主板上的一些硬件资源的访问,需要通过BIOS来完成,即调用BIOS的功能(或说是函数)来完成。这样做的好处是非常的明显的,操作系统的开发商不用关心主板上的具体硬件是如何设计的,而主板的设计厂商则负责实现BIOS来对主板上的硬件资源进行存取访问。总的来说,就是将主板上对于复杂硬件资源的处理任务交给了主板厂商来完成,而不用操作系统厂商去关心,因当说这样做非常的合理和有效。
2)BIOS在加载完了操作系统以后,其还将驻留在内存中,以便操作系统在运行的过程中调用其功能,但boot loader就不需要这样了。通常,boot loader加载完了程序后,跳转到被加载的程序后就不再存在了,这里所说的跳转有时也称之为将运行权交给了被加载程序。
3)boot loader通常采用汇编和C程序相结合进行编写,但BIOS为了节省程序空间往往全部采用汇编进行编写。
下面我们来看一看boot loader在启动过程中会做哪些事情。在讨论这些之前,我们需要明白嵌入式系统的处理器与我们计算机处理器的区别是什么。对于嵌入式系统的处理器,准确的说应当叫微控制器,即英文的microcontroller,而我们的计算机处理器则应称之为微处理器,即microprocessor。微控制器除了具有微处理器的功能外(即通过运算来处理一定的事务),往往其中集成了很多的其它硬件功能模块,比如SDRAM内存控制器、I2C控制器、SD卡控制器等等。正如微处理器的名字那样,它只有处理功能,其它的控制芯片都是通过芯片组(什么是芯片组,我打算后面用另一篇文章来进行解释)来完成的。虽然,我们对于微处理器和微控制器采用了处理器这么一个简化词来描述,但我们需要明白其中的不同之处,这一点非常的重要。下面我们来看一看boot loader做些什么事情,它们有:
1)对PLL时钟进行初始化。往往处理器一启动时,为了更好的设备兼容性,其工作频率都很低,在boot loader程序的特定位置,需要提高处理器的时钟频率,以加快运行速度。速度一旦调好往往是不会改变的了,之所以说是往往,因为如果处理器支持节电模式功能,那也会造成PLL时钟的变化(时钟越快越耗电)。
2)初始化SDRAM内存控制器。通常loader自身也需要用到内存,比如,大多boot loader都会将自己加载到内存中。内存的配置一般是包括行地址和列地址的配置以及自动刷新频率的配置。一旦配置好了,后面就不用再更改了。
3)初始化中断控制器和中断服务程序。

4)初始化各地址空间的片选地址寄存器和读写时序。
5)初始化堆栈(stack)寄存器。比如,在x86中需要初始化ESP寄存器,在PowerPC中需要初始化r1寄存器。
6)对于boot loader中需要访问的其它硬件设备进行初始化。比如,我们通常会有一个串口作为控制台(console),这就需要在boot loader中初始化相应的串口,并接受用户的命令,以响应用户的请求。可以想像,boot loader中存在一定的命令处理程序。
7)将boot loader自身加载到内存中,如果需要解压,那么还得做解压操作。前面提到了,将boot loader加载到内存是为了更快的运行程序。

8)加载需要运行的应用程序并最终运行被加载的应用程序。

需要指出的是,在嵌入式系统中我们的应用程序当中还得做一部分与boot loader相同的工作。比如,对于中断服务程序的重新初始化,因为在boot loader中设置的是boot loader中的程序作为中断服务程序,当应用程序加载了以后,boot loader中的程序就不复存在了,因此,我们需要重新初始化中断服务程序以指向被加载程序中的函数。对于SDRAM内存的初始化、PLL的初始化,在应用程序中通常不需要重新做。虽然,在此我们没有对具体的处理器和操作系统进行讲解,但是无论对于什么处理器和操作系统,其总体过程几乎相同,只是处理器的指令集不同。最后,我要给读者您留一个问题,这个问题如下。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3634

    浏览量

    129845
  • bootloader
    +关注

    关注

    2

    文章

    235

    浏览量

    45798

原文标题:开发嵌入式必须懂的技术-Boot Loader详细介绍

文章出处:【微信号:KY_QRS,微信公众号:开源嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    新手怎么学嵌入式?

    。但面对这个复杂的领域,很多人可能会感到迷茫,不知从何处入手。别担心,本文将为你提供一些入门学习嵌入式技术的建议。 新手入门学习嵌入式技术的途径 1. 了解基础知识 首先,要对
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统中的一种技术嵌入式
    的头像 发表于 12-11 09:23 453次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备
    的头像 发表于 12-09 09:38 473次阅读

    嵌入式系统与物联网的结合

    随着科技的飞速发展,嵌入式系统和物联网(IoT)已经成为现代技术领域的重要组成部分。嵌入式系统是指嵌入
    的头像 发表于 11-06 10:23 483次阅读

    什么是嵌入式?一文读懂嵌入式主板

    在现代科技浪潮中,嵌入式技术已成为支撑各种智能设备和系统运行的核心力量。那么,究竟什么是嵌入式嵌入式
    的头像 发表于 10-16 10:14 1710次阅读

    嵌入式系统的原理和应用

    嵌入式系统是一种专用的计算机系统,其设计初衷是执行特定任务,而非作为通用计算机使用。这类系统通常作为更大系统的一部分,起到控制、监控或辅助的
    的头像 发表于 10-05 17:03 1298次阅读

    嵌入式系统的未来趋势有哪些?

    (ML)技术的快速发展,嵌入式系统将更多地整合这些先进技术,以支持智能决策和自动化。在设备上直接运行AI和ML模型,进行图像识别、自然语言处理、预测分析等任务,将极大提升
    发表于 09-12 15:42

    RT-Thread出席第六届中国嵌入式技术大会,共话嵌入式操作系统与智能工业

    第六届中国嵌入式技术大会将于8月27-28日在深圳会展中心(福田)1号馆举行。本届大会以“AI与开源,开启嵌入式系统智能新时代”为主题,聚焦人工智能与
    的头像 发表于 08-03 08:35 500次阅读
    RT-Thread出席第六届中国<b class='flag-5'>嵌入式</b><b class='flag-5'>技术</b>大会,共话<b class='flag-5'>嵌入式</b>操作<b class='flag-5'>系统</b>与智能工业

    嵌入式系统怎么学?

    嵌入式系统怎么学? 随着物联网、智能制造等新技术的兴起,嵌入式系统的应用范围更加广泛。包括但不限于工业控制、汽车电子、医疗设备、智能家居、
    发表于 07-02 10:10

    入门嵌入式系统这些知识你知道吗?

    嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。通常,嵌入式系统是一个控制程序存储在ROM中的
    发表于 05-03 09:54 653次阅读

    深度详解嵌入式系统专用轻量级框架设计

    MR 框架是专为嵌入式系统设计的轻量级框架。充分考虑了嵌入式系统在资源和性能方面的需求。通过提供标准化的设备管理接口,极大简化了嵌入式应用开
    发表于 04-27 02:32 1045次阅读
    深度<b class='flag-5'>详解</b><b class='flag-5'>嵌入式</b><b class='flag-5'>系统</b>专用轻量级框架设计

    嵌入式fpga是什么意思

    嵌入式FPGA是指将FPGA技术集成到嵌入式系统中的一种解决方案。嵌入式系统是一种为特定应用而设
    的头像 发表于 03-15 14:29 1451次阅读

    fpga是嵌入式

    FPGA(现场可编程门阵列)不是嵌入式系统,但FPGA在嵌入式系统中有着重要的应用。
    的头像 发表于 03-14 17:19 2616次阅读

    嵌入式工程师需要掌握哪些技术?

    嵌入式工程师需要掌握哪些技术? 嵌入式系统是当今科技领域中的重要组成部分,它们存在于我们生活的方方面面,从智能手机到汽车控制系统,从家电到
    发表于 03-04 16:38

    嵌入式系统发展前景?

    应用领域。随着汽车电子化和智能化程度的不断提高,嵌入式系统将在汽车控制、安全系统、自动驾驶等方面发挥更为重要的作用。 工智能和机器学习技术的发展为
    发表于 02-22 14:09